function test(){
var arr = [];
for(var i = 0; i < 5; i++){
arr[i] = function a() {
return i;
}
a();
}
return arr;
}
test();//a is not defined
function c(){
function d(){
console.log('2');
}
d();
}
c(); //2
为什么第一个是undefined呢,不是明明定义了a吗在之前?
函数表达式的函数名字只属于它自己的作用域
以你第二段代码为样本改成函数表达式:
上面这样是没有问题的,但是改成这样:
引用错误
ReferenceError
。作用域中查找标识符但是最后没有找到的时候就会抛出这个错误。
也就是说当前作用域中压根就没有以
d
作为标识符的变量(函数)。(顺带一提,如果在这里找到了
d
标识符,但是它不是函数无法运行,会抛出TypeError
类型错误。)那么,标识符
d
到底在哪个作用域?答案是它自己:
这里最后会把函数
d
打印出来,在函数d
内部是可以使用d
标识符的。