javascript
var 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)
运行过程没什么好说的,知识点就一点,命名函数表达式的函数名仅对函数内部可见,对外部不可见,最好的证明
javascript
var a = function b () { return typeof b === 'function'; } b(); // Error, b is not defined a(); // true