访问传递给回调的变量

时间:2014-05-24 18:12:03

标签: javascript asynchronous callback

任何人都可以解释为什么以下不起作用? watchLog()中的setTimeout回调将输出undefined。

function initWatchers() {
    if (config.watchLogs.length >= 1) {
        config.watchLogs.forEach(function(path) {
            watchLog(path);
        });
    }
}

function watchLog(path) {
    setTimeout(function(path) {
        console.log(path)
    }, 1000);
}

1 个答案:

答案 0 :(得分:3)

因为setTimeout在调用回调函数时,不会将任何参数传递给函数。因此path中的参数function (path)没有得到任何值,而且是undefined。此外,它会隐藏外部作用域中的path变量,替换它(使用undefined)。你真的想要这个:

function watchLog(path) {
    setTimeout(function () {
    // no shadowing arg ^^
        console.log(path)
    }, 1000);
}