JS函数声明问题:var a=function b(){}为什么b()为undefined?

var a= function b(){
alert(“hello”);
};
a(); //hello
b(); //undefined
这个如何理解呢?

先来一个表象上的解释吧:
一个表达式,等号左侧是定义变量名,右侧是给这个变量赋值,我们在上下文中调用的肯定是左侧的变量名,而不是右侧的值。
你的例子,定义了个变量a,然后把一个函数对象b赋值给了a,即a是定义的变量,那一段b函数对象的代码是值,你下文中的b()是在当前作用域中定义的变量名中找b这个变量,而不是去那些值里去找。
如果你改成
function b(){
alert(“hello”);
};
var a= b;
b被定义了,就没问题了。

但是根本上说,还是作用域的问题。等号右侧的b跟a不在同一个作用域中。
改下代码:
var a= function b(){
console.log(b);
};
a();
你会发现b在b函数作用于中是有效的。
再改:
var a= function b(){
console.log(a);
console.log(b);
};

a();

发现b中也能调用到a,典型的作用域链。

 

 

未经允许不得转载:前端撸码笔记 » JS函数声明问题:var a=function b(){}为什么b()为undefined?

上一篇:

下一篇: