【发布时间】:2017-12-02 03:04:16
【问题描述】:
以下javascript代码
var variable = 1
console.log(variable)
{
var variable = 2
}
console.log(variable)
给出输出
1
2
鉴于作用域在其他编程语言中的工作方式,我觉得这非常不直观。范围内变量的重新声明不应该影响范围外变量的值。
我在 Firefox 和 Chromium 上对此进行了测试。我做错了什么还是这是javascript的预期行为?
作为参考,这是其他编程语言中发生的情况:
#include<stdio.h>
int main()
{
int variable=1;
printf("%i\n",variable);
{
int variable=2;
}
printf("%i\n",variable);
return 0;
}
输出:
1
1
【问题讨论】:
-
JavaScript 没有块作用域。至少,不是最近(见答案)。因此,您的两个声明实际上都在同一范围内,并且您的 sn-p 中没有像 c 中那样发生阴影。这就是为什么你会在 JS 中到处看到
(function() {...})();模式。 -
谢谢,我现在使用 [stackoverflow.com/questions/762011/… 更新了我的知识
-
这个资源很好地解释了 javascript 中的不同作用域:stackoverflow.com/questions/500431/…
标签: javascript scope variable-assignment declaration