Javascript displayName()和displayName()之间的区别是什么;并返回displayName;?

Javascript displayName()和displayName()之间的区别是什么;并返回displayName;?,javascript,closures,Javascript,Closures,我是一个有抱负的前端开发人员。我在读一篇关于JavaScript中的闭包的MDN文章。MDN文章使用以下两个代码示例来解释基本概念。虽然我理解基本概念,但我有以下疑问 displayName()和返回显示名称? ** 在第一种情况下,它正在执行函数,而在第二种情况下,makeFunc返回另一个函数。请检查console.log。这就是为什么在myFunc()之后有一个(),它将执行从makeFunc返回的函数 函数init(){ 变量名='Mozilla'; 函数displayName(){

我是一个有抱负的前端开发人员。我在读一篇关于JavaScript中的闭包的MDN文章。MDN文章使用以下两个代码示例来解释基本概念。虽然我理解基本概念,但我有以下疑问

displayName()
返回显示名称

**


在第一种情况下,它正在执行函数,而在第二种情况下,
makeFunc
返回另一个函数。请检查
console.log
。这就是为什么在
myFunc()
之后有一个
()
,它将执行从
makeFunc
返回的函数

函数init(){
变量名='Mozilla';
函数displayName(){
警报(名称);
}
displayName();
}
init();
函数makeFunc(){
变量名='Mozilla';
函数displayName(){
警报(名称);
}
//这是返回一个函数
console.log(显示名称)
返回显示名;
}
var myFunc=makeFunc();
//因为它返回一个函数,所以在添加()之后,它只执行一次
myFunc()
displayName()和返回displayName之间有什么区别

区别在于第一个调用函数
displayName
,而第二个返回该函数。要查看这意味着什么的示例:

const log = () => console.log('I was invoked!')

const getLog = () => {
  return log
}

const doLog = () => {
  log()
}
我们有一些函数,调用时会打印到控制台。我们还有另外两个函数,一个返回
log
,另一个调用它。调用
getLog()
时,我们看不到任何打印到控制台的内容。当我们调用
doLog()
时,我们会这样做

另一点是
getLog
返回
log
的值。因此,我们也可以这样做:

const logByDifferentName = getLog()

这不会导致调用
log
,而是将其分配给另一个值。

displayName()
调用
displayName
引用的函数<代码>返回显示名称
返回引用,在本例中,使
myFunc
引用相同的函数。
displayName
是变量名,在这种情况下是函数,
displayName()
是调用传递零参数的函数的方式。使用
()
时调用函数,而不使用
()
作为引用传递。这可能会有所帮助:@Paulpro我知道我们调用/执行函数时,会在函数名后加上分号和分号,displayName()就是这种情况;。但是“返回引用”有什么用呢?这是什么意思?可以吗。详细说明?谢谢。所以,这两个代码示例的结构不同,但输出相同。我想知道写第二个例子有什么必要,它比第一个长一点?@hemanta如果
name
makeFunc
的一个参数:
function makeFunc(name),这个例子会有趣得多{…
。还要删除makeFunc的第一行,该行将name的值设置为
Mozilla
@hemanta,然后您可以执行
var-mFunc=makeFunc('Mozilla');var-sFunc=makeFunc('StackOverflow');sFunc();sFunc();sFunc();sFunc();sFunc();sFunc();
const log = () => console.log('I was invoked!')

const getLog = () => {
  return log
}

const doLog = () => {
  log()
}
const logByDifferentName = getLog()