Javascript 在JS中调用和分配函数(不带括号)

Javascript 在JS中调用和分配函数(不带括号),javascript,function,invocation,Javascript,Function,Invocation,即使displayName没有括号,也可以使用上述代码,即传递对displayName的引用,然后makeFunc()将调用该引用 现在如果执行返回displayName();var myFunc=makeFunc它也按预期工作。但如果您执行操作,则返回displayName;var myFunc=makeFunc它停止工作 它应该像myFunc()调用这两个函数一样工作?函数引用只是JavaScript中的一个值。函数调用是一个表达式,它涉及两个方面:对函数的引用和带括号的参数列表 如果没有参

即使displayName没有括号,也可以使用上述代码,即传递对displayName的引用,然后makeFunc()将调用该引用

现在如果执行
返回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()?