Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 立即调用函数表达式_Javascript_Function - Fatal编程技术网

Javascript 立即调用函数表达式

Javascript 立即调用函数表达式,javascript,function,Javascript,Function,这两种功能究竟是如何不同的呢 var f2 = function () { console.log(f2); // undefined --> how and why ? }(); 和 var f1 = function () { console.log(f1); // f1 function object }; f1(); 为什么第一个日志未定义? 我期望得到与第二个相同的结果,然后我被从椅子上摔下来,记录了未定义的。在第一个案例中,分配到f2的任务尚未发生。在赋值表

这两种功能究竟是如何不同的呢

var f2 = function () {
    console.log(f2); // undefined --> how and why ?
}();

var f1 = function () {
    console.log(f1); // f1 function object
};
f1();
为什么第一个日志未定义?
我期望得到与第二个相同的结果,然后我被从椅子上摔下来,记录了
未定义的

在第一个案例中,分配到
f2
的任务尚未发生。在赋值表达式中,将首先计算右侧表达式,然后将结果赋值给左侧表达式。在此之前,变量将只有默认值
未定义

将其应用到您的案例中,只需执行函数对象的结果

function() {
   console.log(f2);
}
将被分配到
f2
。但是,您正在访问匿名函数对象中的
f2
。因此,返回默认值
undefined
,因为没有为
f2
赋值

你可以这样确认

var f2 = function () {
    return 1;
}();

console.log(f2);
// 1
这里,执行函数对象,并将结果分配给
f2
。在赋值发生之前,
f2
的值将仅为
未定义的


注意:

在第一种情况下,即使在分配之后,如果执行
console.log(f2)
,它也将只记录
未定义的
。因为,您没有显式地从函数对象返回任何内容。因此,将返回默认值
undefined
,并将其存储在
f2



在第二种情况下,函数对象被分配给
f1
,这就是为什么可以像函数一样调用它(
f1()
)。因此,当您在
f1
自身中记录
f1
时,它将打印函数对象。

在第一种情况下,尚未发生对
f2
的赋值。在赋值表达式中,将首先计算右侧表达式,然后将结果赋值给左侧表达式。在此之前,变量将只有默认值
未定义

将其应用到您的案例中,只需执行函数对象的结果

function() {
   console.log(f2);
}
将被分配到
f2
。但是,您正在访问匿名函数对象中的
f2
。因此,返回默认值
undefined
,因为没有为
f2
赋值

你可以这样确认

var f2 = function () {
    return 1;
}();

console.log(f2);
// 1
这里,执行函数对象,并将结果分配给
f2
。在赋值发生之前,
f2
的值将仅为
未定义的


注意:

在第一种情况下,即使在分配之后,如果执行
console.log(f2)
,它也将只记录
未定义的
。因为,您没有显式地从函数对象返回任何内容。因此,将返回默认值
undefined
,并将其存储在
f2



在第二种情况下,函数对象被分配给
f1
,这就是为什么可以像函数一样调用它(
f1()
)。因此,当您在
f1
自身中记录
f1
时,它会打印函数对象。

在定义变量时,变量尚未定义。在第一种情况下,当您调用函数
f2
时,它不是被分配的变量,在第二种情况下-变量具有值-我现在看到的匿名函数。我需要命名函数表达式。@BlagoErešYup,如果您不打算立即使用命名函数,并且需要多次使用它,那么最好使用命名函数。在定义变量时,变量尚未定义。在第一种情况下,当您调用函数
f2
时,它不是被分配的变量,在第二个变量中,我现在看到了值匿名函数。我需要命名函数表达式。@BlagoErešYup,如果您不打算立即使用命名函数并且需要多次使用它们,则最好使用命名函数。您需要添加
var f2首先在上面case@Grundy我的意思是,在OP的表达式中,函数执行的结果将分配给
f2
。我用文字解释:-)我只是想,你的意思是等效代码,而不是操作代码的一部分:-)你需要添加
varf2首先在上面case@Grundy我的意思是,在OP的表达式中,函数执行的结果将分配给
f2
。我用文字解释:-)我只是想,你指的是等效代码,而不是操作代码的一部分:-)