如何解决设置超时内未定义的变量
为什么第一次插入后未定义eta变量?我查看了闭包,可调用函数,绑定,但不确定这是什么...
var eta = 5400
function runCode() {
function queryEta(eta) {
// redo the eta lol
setTimeout(function() {
console.log(eta)
queryEta()
},eta);
}
queryEta(eta);
}
runCode()
解决方法
在不带任何参数的情况下调用queryEta()
时,eta
中的queryEta
参数是不确定的(并且阴影在顶部)
在创建具有相同名称的本地范围参数时,您正在重新定义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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。