在下面的代码片段中,我声明了一个全局变量,然后检查它是否存在于函数中。
<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/