首页 > 代码库 > 关于Javascript的“变量提升”
关于Javascript的“变量提升”
先来看一段代码:
var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); // the result is : 1
如果你觉得结果是“1”有点出乎意外,那么你应该往下看:
我们知道一个function里面是一个封闭的作用域,在其中用var或者function xxx的形式声明的变量或者函数,在封闭作用域中是不会受外部影响的。如果function b是这样的:
function b() { var a = 10; return; function a () {} }
那结果是“1”就很好理解。
可是为什么当我们在函数体b内没有用var来声明变量a,变量a仍然属于函数体b内定义的内部变量呢?
诀窍就在function a() {}。
采用function xxx形式来定义的xxx函数,会优先于作用域内其他声明。
在function b中,即使看起来已经return了、并没有执行到function a() {},但实际上它已被“提升”至更高到编译优先级,它比a=10更早生效,所以文章开始的那段代码与以下代码是等价的:
var a = 1; function b() { var a = function () {}; a = 10; return; } b(); alert(a); // the result is : 1
如果这样写的话,你应该就能很好地理解什么叫做“变量提升”了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。