怎么理解这行js代码

在chrome的开发者工具中打的以下代码:

var c = function CC(){}

CC  // Uncaught ReferenceError: CC is not defined
c  // ƒ CC(){} 
 
var c1 = new c()
c1.constructor  // ƒ CC(){}

求问为什么输出CC的时候是not definedvar c = function CC(){}这句不是相当于声明了c和CC,然后把CC指向的函数地址赋给c吗?

回复
阅读 2.3k
6 个回答

var c = function CC(){}创建了一个匿名函数然后赋值给c,这个匿名函数有个名字叫CC,但是这个名字只在这个函数体内有效
https://developer.mozilla.org...

函数声明:
function name(param) { statements }

函数表达式:
var myFunction = function name(param) { statements }

var c = function CC(){}实际先然后声明了一个c的变量,然后创建了一个名为CC的函数并赋给c,此时CC函数并未在全局声明,所以外部取不到,(而不是因为他是匿名函数,他不是匿名函数,只是作用域仅限于函数内部)。而在函数内部,CC和c均指向同一个函数

var c = function CC(){}
这个是命名函数表达式。
除了CC()可以在函数内部调用之外,其它地方跟匿名函数表达式一样。
例如计算阶乘:

var c = function CC( n ){
    if( n <= 1 ){
        return 1;
    }
    return n*CC( n - 1 )
}
c(4);//24

因为你的第一行代码是一个表达式,只声明了变量,并没有声明函数。
如果你想两个都声明,应该是这样的:

function CC(){}
var c = cc

个人认为这里

var c = function CC(){}

等号右侧应该是是一个匿名函数,如果有函数名的话可能会忽略掉。
依据:你在控制台输入:CC的错误提示与直接属于一个没有定义的变量的错误提示是一样的。

var c = function CC(){}
后面的CC只在函数体内有效,在递归循环中可能会用到。

推荐问题
宣传栏