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();
在函数内部声明的变量在函数内部会覆盖掉全局同名变量。
在JS预解析时,定义变量的行为会在变量作用域内的顶部实现(hoisting),但是变量的赋值行为并不会提前,
所以第一个alert弹出的是underfined,第二个alert弹出的是”String A”。
posted @ 2016-08-08 11:16  huerge  阅读(148)  评论(0编辑  收藏  举报