Javascript函数范围和提升我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:var a = 1;function b() {
a = 10;
return;
function a() {}}b();alert(a);使用上面的代码,浏览器将发出“1”警报。我仍然不确定它为什么会返回“1”。他说的一些事情就像是:所有的功能声明都被提升到顶部。您可以使用函数来调整变量的范围。仍然没有为我点击。
3 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
功能提升意味着功能被移动到其范围的顶部。那是,
function b() { a = 10; return; function a() {} }
将被重复者重写为此
function b() { function a() {} a = 10; return;}
很奇怪,是吗?
此外,在这种情况下,
function a() {}
表现得一样
var a = function () {};
所以,从本质上讲,这就是代码所做的事情:
var a = 1; //defines "a" in global scopefunction b() { var a = function () {}; //defines "a" in local scope a = 10; //overwrites local variable "a" return; } b(); alert(a); //alerts global variable "a"
婷婷同学_
TA贡献1844条经验 获得超8个赞
你必须要记住的是它解析整个函数并在执行之前解析所有变量声明。所以....
function a() {}
真的变成了
var a = function () {}
var a
强制它进入局部范围,变量范围是通过整个函数,因此全局变量仍然是1,因为你已经通过使它成为一个函数而声明了一个局部范围。
翻阅古今
TA贡献1780条经验 获得超5个赞
函数a
内部悬挂功能b
:
var a = 1; function b() { function a() {} a = 10; return;} b(); alert(a);
这几乎就像使用var
:
var a = 1; function b() { var a = function () {}; a = 10; return;} b(); alert(a);
该函数在本地声明,并且a
只在本地范围内进行设置,而不是全局变量。
添加回答
举报
0/150
提交
取消