关于javascript中的作用域,为什么下面的输出不是21而是22?
有人知道原因吗?因为JavaScript(以及ECMAScript)没有块作用域。只是功能范围 实际上,函数顶部只有一个变量声明,因此关于javascript中的作用域,为什么下面的输出不是21而是22?,javascript,Javascript,有人知道原因吗?因为JavaScript(以及ECMAScript)没有块作用域。只是功能范围 实际上,函数顶部只有一个变量声明,因此x=2覆盖了1的初始值 function t() { var x = 1; if(true) { var x = 2; alert(x); } alert(x); } t(); Javascript中的变量的作用域是函数,而不是块。您有两个vars,但实际上只有一个x在整个函数中应用“var
x=2
覆盖了1
的初始值
function t()
{
var x = 1;
if(true)
{
var x = 2;
alert(x);
}
alert(x);
}
t();
Javascript中的变量的作用域是函数,而不是块。您有两个
var
s,但实际上只有一个x
在整个函数中应用“var”关键字,因此您的代码的行为与此相同:
function t()
{
var x = 1;
// v---------immediately invoked function to create a new scope
(function() {
// new variable scope
if(true)
{
var x = 2;
alert(x); // 2
}
})();
alert(x); // 1
}
t();
不是很乐观的“现在”。我怀疑这种情况永远不会改变。想象一下打破几十年的代码的噩梦。编辑:我纠正了,你编辑的链接提供了一些我没有考虑的额外的见解。@安东尼:如果你的代码在浏览器中运行,那么非常正确。在独立JS引擎的浏览器之外,我们有理由保持乐观(甚至在今天享受它)o) 欢迎使用javascript:)
function t() {
var x = 1;
if (true) {
x = 2;
alert(x);
}
alert(x);
}
t();