在ch 5 of Eloquent Javascript的以下代码中,参数n的值来自何处?
为什么这个函数会返回任何。我想,我不想问一个非特定的,陈词滥调的问题,但我感到困惑:这个功能如何运作?
function unless(test, then) {
if (!test) then();
}
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
}
repeat(3, function(n) {
unless(n % 2, function() {
console.log(n, "is even");
});
});
// → 0 is even
// → 2 is even
&#13;
答案 0 :(得分:6)
正如您所看到的,n
被定义为回调中的参数:
repeat(3, function(n) {
// ^
让我们进入repeat
函数:
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
// We're calling our callback with i ^
}
此处times
将为3
,body
将成为我们的匿名函数(回调)。因此,当我们致电body(i)
时,我们实际调用以下内容(使用n
切换i
,因为我们正在调用body(i)
):
unless(i % 2, function() {
console.log(i, "is even");
})
这是你的整个资料来源:
var times = 3;
for (var i = 0; i < times; i++) {
var n = i; // We're renaming "i" (from body(i)) to "n" (in function(n))
if (!(n % 2)) {
console.log(n, "is even");
}
}
答案 1 :(得分:0)
变量n在您传递给的回调方法中定义&#34;重复&#34;:
repeat(3,function(n){
除非在该回调函数内部进行了其他修改(或使用&#34; var n = ...&#34定义;该值将一直保留在范围内,一直到console.log调用。