请分析一下以下javascript代码的运行过程:
天蓬老师
天蓬老师 2017-04-10 15:30:27
[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()呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
黄舟

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

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

b(); // Error, b is not defined
a(); // true
巴扎黑

我运行报错- -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)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号