首页 > Web开发 > 详细

js函数名的疑惑

时间:2015-10-18 02:13:51      阅读:330      评论:0      收藏:0      [点我收藏+]
function a(b) {
    console.log(b)
    b = function c() {
        b = 2
        c = 3  
        console.log("b:change",b);
        console.log("c:",c);
    }
    console.log("b:before",b);
    b();
    b();
}

a(0)
?
? ? ?每一个函数都是Function类型的实例,函数是对象,函数名是一个指向函数对象的指针。此处是一个函数表达式,b=function c(){},对该函数的定义,引用的指针是保存在了b中,c仅仅是为了让函数体能够使用这个名字来引用自身。在b的这个函数体内,c是作为不可重写的local变量使用的,调用b()执行时b=2,b的引用被改变了,如果再次调用b();那么会报错b 不是一个function.
可以看下控制台打印结果:
0
b:before function c()
b:change 2
c: function c()
Uncaught TypeError: b is not a function
? ? 总结:函数声明和函数表达式的函数名都是对函数的引用,这个引用可以改变;对于函数表达式中的可选函数名来说,在函数体内此函数名引用不可更改,并且只供该函数体调用自身使用。

js函数名的疑惑

原文:http://zhangzhaoaaa.iteye.com/blog/2249759

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!