有谁知道为什么下面代码中的最后一个警告会抱怨a未定义。 a不应该是11因为它是在没有使用var关键字的情况下在four()中初始化的吗?感谢。
function three() {
var a = 12
function four() {
a = 11
function five() {
alert(a)
}
return five
}
return four
}
three()()()
alert(a)
答案 0 :(得分:2)
不,因为a已经使用“var”声明,对four()中的a的赋值引用了该声明的变量,并且a的范围限制为3()。
答案 1 :(得分:1)
var a
位于函数three()
答案 2 :(得分:0)
由于范围问题,最后一次警报会抱怨未定义。由于a是在函数内声明的,所以最后一行(你的警告语句)完全不知道a。
答案 3 :(得分:0)
function three() {
var a = 12
function four() {
a = 11
function five() {
alert(a)
}
return five
}
return four
}
three()()()
alert(a)
简单地说,a未定义,因为它没有定义。
您的功能之外没有变量。为了大大简化它,一组曲线内的东西不存在于那组曲线之外。
您可以在函数之前定义它或将其传递给函数以修复此
function three() {
a = 12
function four() {
a = 11
function five() {
alert(a)
}
return five
}
return four
}
three()()()
alert(a)
编辑评论: Variables declared without var are always global,所以摆脱3中的var就可以了。
答案 4 :(得分:0)
此外,由于我们讨论的是JS中的范围主题,我想指出JavaScript中没有块范围,只有函数和全局。无论何时跳过var
,声明都是全局的。这让很多人措手不及。
答案 5 :(得分:0)
由于变量a
位于函数three
的局部范围内,因此未定义。
这应该给出a
function three()
{
var a = 12;
function four() {
a = 11;
function five() {
return a;
}
return five;
}
return four;
}
var b = three()()();
alert(b);