我正在关注http://eloquentjavascript.net/05_higher_order.html。我有以下代码

function findEven(number, body) {
    for(var i = 0; i < number; i++) body(i)
}

function unless(test, then) {
    if(!test) then();
}

findEven(10, function (n) {

    unless(n%2, function (n) {

        console.log(n, 'is even')

    });


});


我的问题是,如果我将变量n传递给函数unless,它将在控制台输出值“ undefined”。我不明白为什么函数unless无法访问其外部作用域。有人可以解释原因吗?

最佳答案

看这里

function unless(test, then) {
    if(!test) then();
}


和这里

unless(n%2, function (n) {

    console.log(n, 'is even')

});


unless函数不会将任何内容传递给需要n的回调,因此n是未定义的。

可能只是从回调中删除n以便

unless(n%2, function () {

    console.log(n, 'is even')

});

10-06 08:27