当前位置:  开发笔记 > 编程语言 > 正文

重新定义的变量不成功

如何解决《重新定义的变量不成功》经验,为你挑选了2个好方法。

对于下面的代码,正如我已经重新声明a的那样var a,我的期望alert(a)是显示undefined,但为什么显示4

function f(a) {
  var a;
  alert(a);
}

f(4);



1> DaoWen..:

在JavaScript中,变量是函数的全局变量或本地变量.函数中没有嵌套作用域(除非你实际上将一个函数嵌套在另一个函数中).

引用Mozilla的JavaScript文档:

用var声明的变量的范围是它的当前执行上下文,它是封闭函数,或者对于在任何函数外部声明的变量,是全局的.

由于函数参数a和您的函数var a都在同一函数作用域中声明,因此它们将解析为同一个变量.

另请参见:JavaScript中的变量范围是什么?


请注意,对象字段也可以被视为另一个范围的范围 - 但这与您的问题并不真正相关.

另外 - 正如torazaburo在下面的评论中指出的那样 - ECMAScript 6引入了一个let关键字,它允许您在函数中创建真正的嵌套范围.但是,这个功能是新的,我原本不认为值得一提(因为它在生产代码中使用它并不是真的安全).例如,看起来Firefox let在本月底(2016年1月)发布新版本之前不会正式支持新版本.



2> Oriol..:

声明在称为提升的过程中移动到其范围的顶部.

例如:

var a = 5;
var a = 6;
var a;

变得像

var a = undefined;
a = 5;
a = 6;
a;

因此,尝试重新声明已声明的变量而不使用任何赋值不会产生任何效果.

在您的情况下,该变量a已被声明为函数的参数.所以var a;没用.如果要将其设置为undefined,请使用a = void 0;.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有