js函数作用域
var msg = 'String A';
function test() {
alert(msg); //undefined
var msg = 'String A';
alert(msg);
}
test();
以上代码等价于:
var msg = 'String A';
function test() {
var msg; //函数顶部重新申明变量
alert(msg);
msg = 'String A';
alert(msg);
}
test();
在函数内部声明的变量在函数内部会覆盖掉全局同名变量。
var msg = 'String A';
function test() {
var msg; //函数顶部重新申明变量
alert(msg);
msg = 'String A';
alert(msg);
}
test();
在函数内部声明的变量在函数内部会覆盖掉全局同名变量。
在JS预解析时,定义变量的行为会在变量作用域内的顶部实现(hoisting),但是变量的赋值行为并不会提前,
所以第一个alert弹出的是underfined,第二个alert弹出的是”String A”。