一段代码及输出如下:
b = c;
b();
console.log(a); //1
console.log(b); //2
console.log(c); //3
function c() {
a = 1, b = 2, c = 3;
};
将上述代码稍作修改:
b = function c() {
a = 1, b = 2, c = 3;
};
b();
console.log(a); //1
console.log(b); //2
console.log(c); //Uncaught ReferenceError: c is not defined
再次将上述代码稍作修改:
b = function c() {
a = 1, b = 2, c = 3;
console.log(a); //1
console.log(b); //2
console.log(c); //fuction c(){...
};
b();
不知所以然,如何才能正确解释上述三段代码中的变量c
?
众所周知,JS的变量和函数声明都会被存储到执行上下文的变量对象(或活动对象)中,即声明提前。
函数声明 的优先级 高于 变量声明的优先级,但 不会 覆盖变量赋值。
记住一点: 命名函数表达式的标示符(即函数名称)在外部作用域是无效的
参考:深入理解JavaScript系列(2):揭秘命名函数表达式