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

时间:2015-07-11 16:47:06

标签: javascript

该程序如何提供输出5 6 7

请解释我的代码

输出: 五 6 7 未定义

代码



var a = (function() {
  var x = 5;

  function m() {
    console.log(x++);
  }
  return m;

}());

function b() {
  a();
  a();
  a();
}
b();




2 个答案:

答案 0 :(得分:2)

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

var a = (function() {
    ...
}());

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

初始化
var x = 5;

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

的简写
function m() {
    console.log(x++);
}

IIEF返回函数(不是函数的结果) - 这就是var a现在如何对函数m的引用 - 这意味着使用符号{来调用a {1}}正在调用a()

定义的代码
function m

接下来,函数b被定义为简单地调用函数a 3次

  return m;

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

b()

这是第一次调用b();

调用function a

输出function m的值,即5,然后将x增加为6

现在b第二次调用x

调用function a

输出function m的值,现在为6,然后将x增加为7

现在b第三次调用x

调用function a

输出function m的值,现在为7,然后将x增加为8

因为x没有返回任何内容,并且您在某种控制台上运行此操作(可能是浏览器开发工具或节点),控制台会记录function b的结果,这在那里是未定义的没有function b

答案 1 :(得分:0)

引用外部范围变量的内部函数的概念称为闭包

当您调用外部函数并将其返回的函数分配给另一个变量时,该变量仅被声明一次。每次调用返回的函数时,它都在使用并修改一个现在只能被返回函数引用的变量。