Javascript 在JS中调用和分配函数(不带括号)
即使displayName没有括号,也可以使用上述代码,即传递对displayName的引用,然后makeFunc()将调用该引用 现在如果执行Javascript 在JS中调用和分配函数(不带括号),javascript,function,invocation,Javascript,Function,Invocation,即使displayName没有括号,也可以使用上述代码,即传递对displayName的引用,然后makeFunc()将调用该引用 现在如果执行返回displayName();var myFunc=makeFunc它也按预期工作。但如果您执行操作,则返回displayName;var myFunc=makeFunc它停止工作 它应该像myFunc()调用这两个函数一样工作?函数引用只是JavaScript中的一个值。函数调用是一个表达式,它涉及两个方面:对函数的引用和带括号的参数列表 如果没有参
返回displayName();var myFunc=makeFunc代码>它也按预期工作。但如果您执行操作,则返回displayName;var myFunc=makeFunc代码>它停止工作
它应该像myFunc()调用这两个函数一样工作?函数引用只是JavaScript中的一个值。函数调用是一个表达式,它涉及两个方面:对函数的引用和带括号的参数列表
如果没有参数列表,对函数的引用只是一个值
因此,在您的代码中:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
函数中的标识符“displayName”指的是该内部函数。return
语句引用该标识符,但没有括号内的参数列表。因此,来自makeFunc()
的返回值是对该内部函数的引用。将该变量赋给另一个变量会使该变量具有相同的值,这样以后就可以在函数调用表达式中使用该变量
请注意,您可以调用makeFunc()
并立即调用返回的函数:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
这是两个函数调用表达式的序列。第一个是makeFunc()
。它返回一个函数引用,因此调用该函数是因为第二个()
函数引用只是JavaScript中的一个值。函数调用是一个表达式,它涉及两个方面:对函数的引用和带括号的参数列表
如果没有参数列表,对函数的引用只是一个值
因此,在您的代码中:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
函数中的标识符“displayName”指的是该内部函数。return
语句引用该标识符,但没有括号内的参数列表。因此,来自makeFunc()
的返回值是对该内部函数的引用。将该变量赋给另一个变量会使该变量具有相同的值,这样以后就可以在函数调用表达式中使用该变量
请注意,您可以调用makeFunc()
并立即调用返回的函数:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
这是两个函数调用表达式的序列。第一个是makeFunc()
。它返回一个函数引用,因此调用该函数是因为第二个变量()
,如果使用第三个变量,则需要执行myFunc()()
myFunc
与现在的makeFunc
相同,并且从您自己的实现中可以看出,makeFunc
只是生成一个函数,它实际上并没有调用它。当你添加括号时,一个函数会在你不调用它时执行,它只会返回it@AsadSaeeduddin太棒了!为什么会这样呢?@MarinaDunst正如我所说:myFunc
与第三个变体中的makeFunc
相同makeFunc
调用时返回函数。因此,通过执行myFunc()
调用myFunc
将生成displayName
函数,您需要再次调用该函数。因此,当我使用myFunc()时,myFunc()等于displayName()+makeFunc()?如果使用第三种变体,则需要使用myFunc()
myFunc
与现在的makeFunc
相同,从您自己的实现中可以看出,makeFunc
只是生成一个函数,它实际上并没有调用它。当你添加括号时,一个函数会在你不调用它时执行,它只会返回it@AsadSaeeduddin太棒了!为什么会这样呢?@MarinaDunst正如我所说:myFunc
与第三个变体中的makeFunc
相同makeFunc
调用时返回函数。因此,通过执行myFunc()
调用myFunc
将生成displayName
函数,您需要再次调用该函数。因此myFunc()()
。那么,当我执行myFunc()时,myFunc()等于displayName()+makeFunc()?