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

JavaScript的变量申明提前

2016-03-09 13:04 567 查看

变量提升

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:

只是将变量的申明提前,而不提前变量的值和函数的值

'use strict';

function foo() {
var x = 'Hello, ' + y;
alert(x);
var y = 'Bob';
}

foo();

虽然是strict模式,但语句
var x = 'Hello, ' + y;
并不报错,原因是变量
y
在稍后申明了。但是
alert
显示
Hello, undefined
,说明变量
y
的值为
undefined
。这正是因为JavaScript引擎自动提升了变量
y
的声明,但不会提升变量
y
的赋值。

对于上述
foo()
函数,JavaScript引擎看到的代码相当于:

function foo() {
var y; // 提升变量y的申明
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}

由于JavaScript的这一怪异的“特性”,我们在函数内部定义变量时,请严格遵守“在函数内部首先申明所有变量”这一规则。最常见的做法是用一个
var
申明函数内部用到的所有变量:

function foo() {
var
x = 1, // x初始化为1
y = x + 1, // y初始化为2
z, i; // z和i为undefined
// 其他语句:
for (i=0; i<100; i++) {
...
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数