JS 中 方法里的变量声名提前
如下的一段代码,虽然在匿名方法中可以访问全局变量 global, 但由于声明被提前,所以输出依然是undefined
var global = 3; (function(){ console.log(global); var global = 5; })();
等价代码:
var global = 3; (function(){ var global; console.log(global); global = 5; })();
只要还在方法的作用域里,即使无效的代码依然会提前
var global = 3; (function(){ console.log(global); if(false){ var global = 4; } })();
依然输出 undefined, 全局变量被覆盖
除非不在方法的作用域里:
var global = 3; (function () { console.log(global); (function () { var global = 5; })(); })();
这次global不能算是第一个方法的局部变量了,这次他就不能提前声明。
输出3