[英]I am trying to figure out where the c is coming from inside the function
var x = 2;
var y = 8;
var a = function(b) {
return function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
};
var fn = a(x);
x = 4;
console.log(fn( Math.random() * 10) );
我试图控制日志 a、b、c,但我仍然无法理解这里发生的事情
你有两个函数,我们称它们a
和anonymous
。
a
这样的:
var a = function(b) {
/* do stuff */
};
这相当于
function a(b) {
/* do stuff */
};
现在,让我们定义 function anonymous
:
function anonymous(c) {
var num = Math.abs(b); // note that 'b' is pulled in from the parent's scope
return x + y + Math.abs(b) + c; // note that 'x' and 'y' also pulled in from the parent's scope
};
在 javascript 中,可以将函数分配给变量。 这正是您的示例代码对 var a
所做的:将其设置为等于 function a
。
由于这种将函数分配给变量的能力,函数实际上可以将其他函数作为值返回。 这也正是a
所做的。 它返回 function anonymous
。
var a = function(b) {
return anonymous;
};
现在,在您的代码中, function 匿名没有名称。 但是,我定义的anonymous
等于您a
返回的未命名的 function。 让我们将其替换为上一个代码块中的anonymous
。
var a = function(b) {
return function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
};
你可以等效地写:
var a = function(b) {
var anonymous = function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
return anonymous;
};
因此,当您调用var fn = a(x)
, fn = anonymous
时,function。 回想一下,匿名接受一个参数,并将该参数命名为c
。
因此,当我们调用fn(Math.random() * 10)
时,fn 被替换为anonymous
,并且由于anonymous
的参数是Math.random() * 10
,所以当anonymous
执行时, c = Math.random() * 10
对不起,这是我的第一个解释,可能很难理解,但我正在尽力解释:
我只想破解代码:
你的代码:
var x = 2;
var y = 8;
var a = function(b) {
return function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
};
var fn = a(x);
x = 4;
console.log(fn( Math.random() * 10) );
完全令人困惑
console.log(fn( Math.random() * 10) )
instead of that line of code, I changed it to
console.log(fn(10) ) for simplitcity.
当您执行 var fn = a(x) 时,b 值将为 2,fn 将被分配给 var a 的返回值,它确实是 function
所以这里 fn 变成了:
var fn = function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
x = 4;// x value was changed to 4 instead of 2 from the line 1
现在他通过最后一行代码传递 c 值,即:
console.log(fn( Math.random() * 10) );
or
for simplicity
console.log(fn(10) );
所以最后代码看起来像这样:
var y = 8;
var fn = function(c) {
var num = Math.abs(b);
return x + y + Math.abs(b) + c;
};
x = 4;
console.log(fn(10) );
希望你能理解我的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.