来自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);
答案 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
注释具有误导性,因为考虑在函数的声明点配置闭包更有用。
实际情况是,在实例化函数对象时配置指向外部词法环境的指针,然后将该指针复制到与所述函数对象的任何调用相关联的执行上下文中。