怎么理解这行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吗?

阅读 3.1k
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只在函数体内有效,在递归循环中可能会用到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题