14 javascript scope var
对于下面的代码,正如我已经重新声明a的那样var a,我的期望alert(a)是显示undefined,但为什么显示4?
function f(a) {
var a;
alert(a);
}
f(4);Run Code Online (Sandbox Code Playgroud)
在JavaScript中,变量是函数的全局变量或本地变量.函数中没有嵌套作用域(除非你实际上将一个函数嵌套在另一个函数中).
引用Mozilla的JavaScript文档:
由于函数参数a和您的函数var a都在同一函数作用域中声明,因此它们将解析为同一个变量.
另请参见:JavaScript中的变量范围是什么?
请注意,对象字段也可以被视为另一个范围的范围 - 但这与您的问题并不真正相关.
另外 - 正如torazaburo在下面的评论中指出的那样 - ECMAScript 6引入了一个let关键字,它允许您在函数中创建真正的嵌套范围.但是,这个功能是新的,我原本不认为值得一提(因为它在生产代码中使用它并不是真的安全).例如,看起来Firefox let在本月底(2016年1月)发布新版本之前不会正式支持新版本.
声明在称为提升的过程中移动到其范围的顶部.
例如:
var a = 5;
var a = 6;
var a;
Run Code Online (Sandbox Code Playgroud)
变得像
var a = undefined;
a = 5;
a = 6;
a;
Run Code Online (Sandbox Code Playgroud)
因此,尝试重新声明已声明的变量而不使用任何赋值不会产生任何效果.
在您的情况下,该变量a已被声明为函数的参数.所以var a;没用.如果要将其设置为undefined,请使用a = void 0;.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |