Javascript函数如何给出输出5,6,7

Javascript函数如何给出输出5,6,7,javascript,Javascript,该程序如何给出输出5 6 7 请给我解释一下密码 输出: 5. 6. 7. 未定义 代码 var a=(函数(){ var x=5; 函数m(){ console.log(x++); } 返回m; }()); 函数b(){ a(); a(); a(); } b()从外部作用域引用变量的内部函数的概念称为闭包 当您调用外部函数并将其返回的函数赋给另一个变量时,该变量只声明一次。每次调用返回函数时,它都在处理和修改一个变量,该变量现在只能由返回函数引用。var a是立即调用表达式函数(IIEF)的

该程序如何给出输出5 6 7

请给我解释一下密码

输出: 5. 6. 7. 未定义

代码

var a=(函数(){
var x=5;
函数m(){
console.log(x++);
}
返回m;
}());
函数b(){
a();
a();
a();
}

b()从外部作用域引用变量的内部函数的概念称为闭包


当您调用外部函数并将其返回的函数赋给另一个变量时,该变量只声明一次。每次调用返回函数时,它都在处理和修改一个变量,该变量现在只能由返回函数引用。

var a
是立即调用表达式函数(IIEF)的结果

在这个IIEF中,我们有一个局部变量x,用值5初始化

var x = 5;
我们还有一个函数m,它将x的值输出到控制台,然后将x的值加1:
x++
x=x+1

function m() {
    console.log(x++);
}
IIEF返回函数(不是函数的结果)-这就是为什么
var a
现在是对函数
m
的一种引用-这意味着调用a,通过使用符号
a()
调用由
函数m
定义的代码

  return m;
接下来,函数b被定义为只调用函数a 3次

function b() {
  a();
  a();
  a();
}
接下来,调用函数b-
b()

这将首次调用
函数a

它调用函数m

  return m;
它输出
x
的值,即5,然后将
x
增加到6

现在b第二次调用
函数a

它调用函数m

  return m;
它输出
x
的值,现在是6,然后将
x
增加到7

现在b第三次调用
函数a

它调用函数m

  return m;
它输出
x
的值,现在是7,然后将
x
增加到8


由于没有从
函数b
返回任何内容,并且您正在某种控制台(可能是浏览器开发工具或节点)上运行此操作,因此控制台会记录
函数b
的结果,当没有
返回值时,函数b
是未定义的

是否有您特别不了解的内容?您希望得到什么样的输出?您希望它输出其他东西吗?