【问题标题】:Variable undefined inside of set timeout在设置超时内未定义变量
【发布时间】:2020-12-01 05:06:03
【问题描述】:
为什么第一次迭代后 eta 变量未定义?我查看了闭包、可调用函数、绑定,但我不确定交易是什么......
var eta = 5400
function runCode() {
function queryEta(eta) {
// redo the eta lol
setTimeout(function() {
console.log(eta)
queryEta()
}, eta);
}
queryEta(eta);
}
runCode()
【问题讨论】:
标签:
javascript
scope
closures
settimeout
【解决方案1】:
当您在没有任何参数的情况下调用 queryEta() 时,queryEta 中的 eta 参数是未定义的(并且会遮盖顶部定义的参数)
【解决方案2】:
当您创建具有相同名称的本地范围参数时,您正在重新定义 eta 变量在函数内部的含义。
另外,不要忘记将参数传递给内部函数内部的函数调用。
如果您在理解范围界定方面遇到困难,请查看教程,例如"JavaScript Scope and Closures".
var globalEta = 5400;
function runCode() {
function queryEta(localEta) {
setTimeout(function() {
console.log(localEta)
queryEta(localEta); // Make sure you pass this in!
}, localEta);
}
queryEta(globalEta);
}
runCode()
您可以访问该窗口...
var eta = 5400;
function runCode() {
function queryEta(eta) {
setTimeout(function() {
console.log(eta)
queryEta(eta); // Make sure you pass this in!
}, eta);
}
queryEta(window.eta); // Here!
}
runCode()