这两个功能在世界上是如何不相同的?
var f2 = function () {
console.log(f2); // undefined --> how and why ?
}();
&安培;
var f1 = function () {
console.log(f1); // f1 function object
};
f1();
为什么第一个记录undefined
?
我期待与第二个结果相同的结果然后我被undefined
记录下来了。
答案 0 :(得分:4)
在第一种情况下,f2
的分配尚未发生。在赋值表达式中,将首先计算右侧表达式,并将结果分配给左侧表达式。直到那时变量才会有默认值undefined
。
在你的情况下应用它,只有执行函数对象的结果
function() {
console.log(f2);
}
将被分配到f2
。但是,您正在访问匿名函数对象中的f2
。因此,返回默认值undefined
,因为尚未将任何内容分配给f2
。
您可以像这样确认
var f2 = function () {
return 1;
}();
console.log(f2);
// 1
此处,执行函数对象,并将结果分配给f2
。直到作业完成,f2
的值仅为undefined
。
注意:强>
在第一种情况下,即使在分配后,如果您执行console.log(f2)
,它也只会记录undefined
。因为,您没有显式地从函数对象返回任何内容。因此,将返回默认值undefined
,并将其存储在f2
。
在第二种情况下,函数对象被分配给f1
,这就是您能够像函数(f1()
)一样调用它的原因。因此,当您在f1
内记录f1
时,它会打印函数对象。