任何人都可以解释为什么以下不起作用? 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);
}
答案 0 :(得分:3)
因为setTimeout
在调用回调函数时,不会将任何参数传递给函数。因此path
中的参数function (path)
没有得到任何值,而且是undefined
。此外,它会隐藏外部作用域中的path
变量,替换它(使用undefined
)。你真的想要这个:
function watchLog(path) {
setTimeout(function () {
// no shadowing arg ^^
console.log(path)
}, 1000);
}