设置间隔后变量未定义
Variable undefined after setting interval
我想知道为什么我的变量最初设置为一个值,当从 interval
.
访问时变成 undefined
考虑以下 JQuery:
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(this.Action, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});
这段代码的输出结果如下:
1
undefined
我理解1
,因为TEST.DIR
的值在Init
函数中设置为1
,当Action
函数被第一次调用。
但是,当从 interval TEST.ITV
第二次和所有其他时间调用此函数时,TEST.DIR
是 undefined
,我不明白为什么。
另请参阅此 FIDDLE。
有人可以向我解释我做错了什么或忽略了什么吗?
谢谢!
那是因为'this'指的是你设置区间中的window,所以它是未定义的(没有window.DIR)
很多人对 'this' 关键字有疑问,检查 MDN docs out
this.Action
作为函数 w/o 传递给 setInterval
其上下文,因此 this
不再指向 TEST
的实例但默认为window
。像这样尝试:
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(function() {TEST.Action() }, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});
我想知道为什么我的变量最初设置为一个值,当从 interval
.
undefined
考虑以下 JQuery:
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(this.Action, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});
这段代码的输出结果如下:
1
undefined
我理解1
,因为TEST.DIR
的值在Init
函数中设置为1
,当Action
函数被第一次调用。
但是,当从 interval TEST.ITV
第二次和所有其他时间调用此函数时,TEST.DIR
是 undefined
,我不明白为什么。
另请参阅此 FIDDLE。
有人可以向我解释我做错了什么或忽略了什么吗?
谢谢!
那是因为'this'指的是你设置区间中的window,所以它是未定义的(没有window.DIR)
很多人对 'this' 关键字有疑问,检查 MDN docs out
this.Action
作为函数 w/o 传递给 setInterval
其上下文,因此 this
不再指向 TEST
的实例但默认为window
。像这样尝试:
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(function() {TEST.Action() }, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});