`

js函数名的疑惑

阅读更多
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
    总结:函数声明和函数表达式的函数名都是对函数的引用,这个引用可以改变;对于函数表达式中的可选函数名来说,在函数体内此函数名引用不可更改,并且只供该函数体调用自身使用。
0
2
分享到:
评论
2 楼 zhangzhaoaaa 2015-10-17  
baeiou 写道
这方面我很想多听听,你能不能多说一点

你想听什么?我们可以交流一下,互相学习
1 楼 baeiou 2015-10-17  
这方面我很想多听听,你能不能多说一点

相关推荐

Global site tag (gtag.js) - Google Analytics