Javascript代码
var d = function c() { console.log(c); };
d(); // function c() { console.log(c); };
c(); // Reference Error
我理解变量提升的概念,其中变量声明和函数定义被提升到现有范围的顶部。函数表达式中的函数定义也不会被提升。
所以,上面将是
var d;
d = function c() { console.log(c); };
d();
c();
因此d是对命名函数c
的引用d()
时,函数c在全局范围内执行,其中没有名为c的变量或属性。但是仍然控制台设法记录c的功能定义。 c()
时,我收到了引用错误。 [按我的预期] 案例2证明没有名为c的窗口属性可用
那么,d()
如何设法在执行时打印c的定义?
每个函数在本地范围内都有自己的定义作为属性吗?
答案 0 :(得分:1)
是。命名函数表达式仅生成与该函数范围内的函数名对应的变量。
这是一篇关于这个主题的优秀而冗长的文章:http://kangax.github.com/nfe/
另见the relevant section of the ECMAScript 5 spec。它有一个特别的说明。