您的位置:首页 > Web前端 > JavaScript

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: