javascript - 在 javascript 中分配之前的变量阴影和测试是否存在

标签 javascript shadowing

在下面的代码片段中,我声明了一个全局变量,然后检查它是否存在于函数中。

<script>
x = 5;
$(function() {
   var x = x || 3;
   console.log(x); // prints 3
});
</script>

这表现不同:

<script>
x = 5;
$(function() {
   var y = x || 3;
   console.log(y); // prints 5
});
</script>

我希望在第一个示例中,内部作用域中的变量声明将检测到 x 已经存在于全局作用域中,并取其值。为什么第一个例子3?

具体来说,我最近写了一些代码来检查 var _gaq = _gaq || [] 在 jQuery 就绪范围内,当没有任何内容发布到 Analytics 时感到困惑。

最佳答案

您在错误的范围内查找 x。由于变量提升,var x 实际上在您的 x || 之前定义了一个值为 undefined 的本地 x 变量。 3 检查发生:

var x = x || 3;

实际上是:

var x = undefined;
x = x || 3;

只需将其更改为在 window 对象上查找 x:

var x = window.x || 3;

关于javascript - 在 javascript 中分配之前的变量阴影和测试是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511242/

相关文章:

python - 从具有相同名称的脚本导入已安装的包引发 "AttributeError: module has no attribute"或 ImportError 或 NameError

java - 如何从父类(super class)中的方法访问(隐藏)子类中的成员变量?

javascript - 为什么 JQuery 和 Javascript DOM 方法会去除空格?

javascript - 为什么这两个反向循环之间存在性能差异?

javascript - 如何从 IONIC 调用一个简单的网络服务

ruby - 隐藏实例方法的 Ruby 局部变量的行为

Java 变量阴影方法覆盖概念

javascript - 返回Json对象错误

javascript - 为什么 requirejs 没有加载依赖项?

java - 绕过现场阴影