JavaScript Closure - 试图理解以下代码

时间:2016-11-21 06:47:48

标签: javascript closures

来自Java后台试图理解以下代码。

自: https://medium.freecodecamp.com/lets-learn-javascript-closures-66feb44f6a44#.cbk6c4e9g

对于函数 bar(c),哪一行将参数 c 传递到 bar(c),因为我在这里看不到它。

感谢。

var x = 10;
function foo(a) {
  var b = 20;

  function bar(c) {
    var d = 30;
    return boop(x + a + b + c + d);
  }

  function boop(e) {
    return e * -1;
  }

  return bar;
}

var moar = foo(5); // Closure  
/* 
  The function below executes the function bar which was returned 
  when we executed the function foo in the line above. The function bar 
  invokes boop, at which point bar gets suspended and boop gets push 
  onto the top of the call stack (see the screenshot below)
*/
moar(15);

2 个答案:

答案 0 :(得分:1)

执行函数调用var moar = foo(5)的第一个语句时  moar变量将是函数bar(c){var d = 30; return boop(x + a + b + c + d);

检查代码段以了解



var x = 10;
function foo(a) {
  var b = 20;

  function bar(c) {
    var d = 30;
    return boop(x + a + b + c + d);
  }
  return bar;
}

var moor=foo(10);
console.log(moor);




2.在此声明之后(15),你实际上将15传递给了bar方法

它会执行bar方法,c为15.现在这个函数将返回boop(80),它只是-80



var x = 10;
function foo(a) {
  var b = 20;

  function bar(c) {
    var d = 30;
    return boop(x + a + b + c + d);
  }

  function boop(e) {
    return e * -1;
  }

  return bar;
}

var moar = foo(5)
console.log(moar(15));




希望有所帮助

答案 1 :(得分:1)

moar(15)15传递给bar,并将其复制到参数c

// Closure注释具有误导性,因为考虑在函数的声明点配置闭包更有用。

实际情况是,在实例化函数对象时配置指向外部词法环境的指针,然后将该指针复制到与所述函数对象的任何调用相关联的执行上下文中。