javascript变量声明提升(hoisting)
2014-07-21 17:20
295 查看
javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面。
先看一段代码
这段代码运行的结果是什么呢?
答案是:undefined
这段代码说明了两个问题,
第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动
输出结果为”hello”,说明javascript是没有块级作用域的。函数是JavaScript中唯一拥有自身作用域的结构。
第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于:
变量提升
变量提升,很简单,就是把变量提升提到函数的top的地方。需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来。
比如:
我们定义三个变量:
代码如下:
(function(){
var a='One';
var b='Two';
var c='Three';
})()
实际上它是这样子的:
代码如下:
(function(){
var a,b,c;
a='One';
b='Two';
c='Three';
})()
函数提升
函数提升是把整个函数都提到前面去。
在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。
函数声明方式提升【成功】
代码如下:
function myTest(){
foo();
function foo(){
alert("我来自 foo");
}
}
myTest();
函数表达式方式提升【失败】
代码如下:
function myTest(){
foo();
var foo =function foo(){
alert("我来自 foo");
}
}
myTest();
先看一段代码
这段代码运行的结果是什么呢?
答案是:undefined
这段代码说明了两个问题,
第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动
输出结果为”hello”,说明javascript是没有块级作用域的。函数是JavaScript中唯一拥有自身作用域的结构。
第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于:
变量提升
变量提升,很简单,就是把变量提升提到函数的top的地方。需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来。
比如:
我们定义三个变量:
代码如下:
(function(){
var a='One';
var b='Two';
var c='Three';
})()
实际上它是这样子的:
代码如下:
(function(){
var a,b,c;
a='One';
b='Two';
c='Three';
})()
函数提升
函数提升是把整个函数都提到前面去。
在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。
函数声明方式提升【成功】
代码如下:
function myTest(){
foo();
function foo(){
alert("我来自 foo");
}
}
myTest();
函数表达式方式提升【失败】
代码如下:
function myTest(){
foo();
var foo =function foo(){
alert("我来自 foo");
}
}
myTest();
相关文章推荐
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- javascript变量声明提升(hoisting)
- JS 变量声明提升(Hoisting)
- JavaScript的变量声明提升问题浅析(Hoisting)
- javascript变量声明提升
- JavaScript变量声明与提升
- JavaScript变量作用域和变量提升解释(JavaScript Variable Scope and Hoisting Explained)
- JavaScript变量作用域和变量提升解释(JavaScript Variable Scope and Hoisting Explained)
- JavaScript变量提升和函数声明预解析
- 浅谈JavaScript变量声明提升
- Javascript变量与函数的声明与提升
- javascript变量声明提升
- jacascript 函数声明、函数表达式与声明提升(hoisting机制)
- JavaScript变量提升(Hoisting)
- JavaScript变量声明与提升