为什么这个函数在单独的括号中有第二个参数?
Why does this function have a second parameter in separate brackets?
function noisy(f) {
return function (arg) {
console.log("Calling with", arg);
var val = f(arg);
console.log("Called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
// calling with 0
// Called with 0 - got false
我明白更高的功能可以是改变其他功能的功能,就像上面的例子。我明白为什么第二个 console.log 在输出时给出 Called with 0 - got false
。
我不明白为什么第二个参数 (0)
包含在第二对括号中,而不是 Boolean
?
为什么要返回val
?
让我们破解密码。
function noisy(f) {
return function (arg) {
console.log("Calling with", arg);
var val = f(arg);
console.log("Called with", arg, "- got", val);
return val;
};
}
var fn = noisy(Boolean); // fn now is the inner function
var value = fn(0); // Calling the inner function
如代码所示,noisy
是一个函数,在调用时 return 是另一个接受单个参数的函数。
所以,在下面的语句中
noisy(Boolean)(0);
Boolean
作为参数传递给 noisy
函数,0
传递给内部函数。
I don't understand why the second parameter (0)
is contained in a second pair of brackets, & not with Boolean
?
可以,但为此需要更改一些内容。这使用闭包的概念,其中内部函数可以访问外部函数的参数。
// Pass two arguments to `noisy()`
function noisy(f, arg) {
return function () {
// Arguments can still be accessed here
console.log("Calling with", arg);
var val = f(arg);
console.log("Called with", arg, "- got", val);
return val;
};
}
// To call, the second braces need to be used
var val = noisy(Boolean, 0)();
Why does val have to be returned?
这完全取决于您。如果你想从函数中得到一些值,你可以 return 值和 catch/assign 它在其他变量中。
function noisy(f) {
return function (arg) {
console.log("Calling with", arg);
var val = f(arg);
console.log("Called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
// calling with 0
// Called with 0 - got false
我明白更高的功能可以是改变其他功能的功能,就像上面的例子。我明白为什么第二个 console.log 在输出时给出 Called with 0 - got false
。
我不明白为什么第二个参数
(0)
包含在第二对括号中,而不是Boolean
?为什么要返回
val
?
让我们破解密码。
function noisy(f) {
return function (arg) {
console.log("Calling with", arg);
var val = f(arg);
console.log("Called with", arg, "- got", val);
return val;
};
}
var fn = noisy(Boolean); // fn now is the inner function
var value = fn(0); // Calling the inner function
如代码所示,noisy
是一个函数,在调用时 return 是另一个接受单个参数的函数。
所以,在下面的语句中
noisy(Boolean)(0);
Boolean
作为参数传递给 noisy
函数,0
传递给内部函数。
I don't understand why the second parameter
(0)
is contained in a second pair of brackets, & not withBoolean
?可以,但为此需要更改一些内容。这使用闭包的概念,其中内部函数可以访问外部函数的参数。
// Pass two arguments to `noisy()` function noisy(f, arg) { return function () { // Arguments can still be accessed here console.log("Calling with", arg); var val = f(arg); console.log("Called with", arg, "- got", val); return val; }; } // To call, the second braces need to be used var val = noisy(Boolean, 0)();
Why does val have to be returned?
这完全取决于您。如果你想从函数中得到一些值,你可以 return 值和 catch/assign 它在其他变量中。