JS的变量提升
JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部
'use strict';
function foo() {
var x = 'Hello, ' + y; //y是undefined
console.log(x);
var y = 'Bob'; //声明了变量y
0+
}
foo(); //结果为Hello, undefined
其结果是得不到y,这是为什么呢,因为变量提升的作用,提升了y的声明,但没有提升y的赋值,也就是
'use strict';
function foo() {
var y; //只提升了y的声明,赋值没有提升
var x = 'Hello, ' + y;
console.log(x);
}
foo(); //结果为Hello, undefined
所以是得不到y的值的,如果想正确得到y的值,就要这样
function foo() {
y = 'Bob'; //先声明y的值
var x = 'Hello, ' + y;
console.log(x);
var y ; //根据变量提升原则自动提升了上去
}
foo(); //结果为hello, Bob
正确的归整写法是
function foo() {
var y = 'Bob';
var x = 'Hello, ' + y;
console.log(x);
}
foo(); // 结果为Hello, Bob