javascript - 将变量传递给高阶函数

标签 javascript function scope higher-order-functions

我正在关注 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')

});

关于javascript - 将变量传递给高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31229538/

相关文章:

javascript - Node.js:通过电子邮件发送数据作为附件而不保存它

javascript - 当类实例不可访问时,如何模拟类的特定方法,同时保持所有其他方法的实现?

javascript - 函数不调用其他函数

r - 将值列表作为参数传递给 R 中的函数

c - 如何将 2 个大数作为字符串相乘(使用之前添加 2 个字符串的函数)? C

python - 为什么内部函数不能在python的外部范围内获取变量

javascript - 动态扩展动态加载的 DIV 的宽度

c - C 函数通常比 OOP 语言的方法有更多的参数吗?

javascript - 访问 "Parent Scope"

java - 返回 null 是一个好主意吗?