首页 > 请分析一下以下javascript代码的运行过程:

请分析一下以下javascript代码的运行过程:

javascriptvar a= function b(){
    alert("Y");
}

a();
b(); 

a = function b(){
    alert("N")
}

a();
b();

运行结果为 Y N N N
为什么呢?

补充,
经测试:以上代码在IE6,IE7,IE8下运行正常
先忽略b();无法掉用的错误。
根据IE的运行结果,我的疑问在于:第一次调用a();为什么会是Y而不是N
第一次调用b(); 弹出N 那么就表示函数b()已经被覆盖了,那么
a为什么没有指向重新定义的函数b()呢?


我运行报错- -b()没有定义


就代码来说,b()应该报错的。
这是函数声明与函数表达式的区别。

函数表达式

var a= function b(){ //函数表达式,函数名称b是可设定的,并且只存在于函数内部。a在程序执行时候赋值。
    alert("Y");
}
a(); // Y 
b(); // b is not defined

a = function b() { //仍是函数表达式,执行到这块代码时候,变量a被重新赋值

}

函数声明

var a= function b(){ 
    alert("Y");
}
a(); // Y 
b(); // t

function b () { //函数声明,进入上下文时候存在。
    alert('t')
}

更详细可参考汤姆大叔-深入理解JavaScript系列(15):函数(Functions)


运行过程没什么好说的,知识点就一点,命名函数表达式的函数名仅对函数内部可见,对外部不可见,最好的证明

javascriptvar a = function b () {
  return typeof b === 'function';
}

b(); // Error, b is not defined
a(); // true
【热门文章】
【热门文章】