本文实例讲述了JavaScript变量声明提升。分享给大家供大家参考,具体如下:
如下代码输出的结果是?
var num = 123; function foo1(){ console.log( num ); //undefined var num = 456; console.log( num ); //456 } foo1();
Javascript代码执行分为两个大步:
预解析的过程
代码的执行过程
程序在执行过程中,会先将代码读取到内存中检查,会将所有的声明在此进行标记,所谓的标记就是让JS解析器知道有这个名字,后面在使用名字的时候不会出现未定义的错误。这个标记过程就是提升。
声明:
名字的声明,标识符声明(变量名声明)
函数的声明
函数声明与函数表达式有区别,函数声明是单独写在一个结构中,不存在任何语句,逻辑判断等结构中
function f() {} function func() { // 函数声明 } if ( true ) { function func2 () {} //函数表达式 } var f = function func3 () {}; //函数表达式 this.sayHello = function () {}; //函数表达式 var i= 1; function func4 () {} // 函数声明 var j = 2; }
首先函数声明告诉解析器有这个名字存在,该阶段与名字声明一样
告诉解析器,这个名字对应的函数体是什么
var num = 1; function num () { alert( num ); } num(); // 报错
分析
预解析代码,提示名字
开始执行代码,第一句话从赋值语句开始执行
var num = 123; function foo1(){ console.log( num ); //undefined var num = 456; console.log( num ); //456 } foo1();
执行函数调用
if ( ! 'a' in window ) { var a = 123; } console.log( a );
首先,预解析,读取提升 a ,有一个名字 a 存在了
其次,in 运算符:判断某一个字符串描述的属性名是否在对象中
执行第一个判断:! 'a' in window
最后,打印结果 a 的值为 undefined
if ( false ) { function f1 () { console.log( 'true' ); } } else { function f1 () { console.log( 'false' ); } } f1();
预解析:提升 f1 函数,只保留提升后的内容,所以打印是 false
执行代码,第一句话就是一个空的if结构
if ( true ) { } else { }
执行函数调用,得到 false
function foo () } {} var foo = function () {};
上面的语法是声明,可以提升,因此在函数上方也可以调用
下面的语法是函数表达式,函数名就是foo ,他会提升,提升的不是函数体
函数表达式也是支持名字语法
var foo = function func1 () {}; func();
函数有一个属性name,表示的是函数名,只有带有名字的函数定义,才会有name属性值,否则是“”
新的浏览器中,写在if、while、do..while结构中的函数,都会将函数的声明转换成特殊的函数表达式
将代码
if (...) { function foo () { ... } }
转换成
if (...) { var foo = function foo () { .... } }
完。
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍举例子说明javascript的变量声明提升和函数声明提升相关面试题,主要包含被问及举例子说明javascript的变量声明提升和函数声明提升时的应答技巧和注意事项,需要的朋友参考一下 先声明函数名,再声明 var 变量名,然后按顺序从上到下赋值。
本文向大家介绍JavaScript中Hoisting详解 (变量提升与函数声明提升),包括了JavaScript中Hoisting详解 (变量提升与函数声明提升)的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍了关于JavaScript中Hoisting(变量提升与函数声明提升)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 如何将 函数声明 / 变量 “
本文向大家介绍JavaScript中变量提升与函数提升经典实例分析,包括了JavaScript中变量提升与函数提升经典实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript中变量提升与函数提升。分享给大家供大家参考,具体如下: 从两个实例说起: eg1: eg2: 1、提升 变量和函数声明从它们在代码中出现的位置被提升到了最上面。 注意: 只有声明本身会被提升,而赋值
本文向大家介绍JavaScript变量提升和严格模式实例分析,包括了JavaScript变量提升和严格模式实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript变量提升和严格模式。分享给大家供大家参考,具体如下: 1.什么是变量提升 所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部。 下面我们通过一个例子来详细说明一下。
本文向大家介绍JavaScript中提前声明变量或函数例子,包括了JavaScript中提前声明变量或函数例子的使用技巧和注意事项,需要的朋友参考一下 如题所示,看下面的示例。 (可以使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发者工具,进入控制台console输入) (使用技巧: 控制台输入时Shift+Enter可以中途代码换行) 执行时的截图如下所示: 解释如下: 在Jav
本文向大家介绍浅析JavaScript声明变量,包括了浅析JavaScript声明变量的使用技巧和注意事项,需要的朋友参考一下 JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。 定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指