标签:style java io strong ar cti 代码 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
如果这样写的话,你应该就能很好地理解什么叫做“变量提升”了。
关于Javascript的“变量提升”,布布扣,bubuko.com
标签:style java io strong ar cti 代码 javascript
原文地址:http://my.oschina.net/tommyfok/blog/299896