在jQuery的setInterval中使用$(this)
我在jQuery插件中使用以下代码:在jQuery的setInterval中使用$(this),jquery,this,setinterval,Jquery,This,Setinterval,我在jQuery插件中使用以下代码: setInterval(function() { localStorage.setItem("flag", "set"); var data = $(this).serializeArray(); console.log($(this)); $.each(data, function(i, obj) { localStorage.setItem(obj.name, obj.v
setInterval(function() {
localStorage.setItem("flag", "set");
var data = $(this).serializeArray();
console.log($(this));
$.each(data, function(i, obj) {
localStorage.setItem(obj.name, obj.value);
});
console.log('saved');
console.log(localStorage);
}, 5000);
if (localStorage.getItem("flag") == "set") {
alert("This form has saved data!");
var data = $(this).serializeArray();
console.log($(this));
$.each(data, function(i, obj) {
$("[name='" + obj.name +"']").val(localStorage.getItem(obj.name));
});
}
奇怪的是,第一个$this包含运行插件的表单,而第二个$this包含DOMWindow。为什么这两个$this包含不同的东西?是因为第一个在setInterval内吗?是的,您有一个匿名函数,在setInterval声明中没有名称的函数,它创建了自己的作用域
第一个控制台.log$这将有权访问任何全局或其内部设置的任何内容,第二个控制台.log$这将只有权访问全局变量,正如您所发现的,全局范围中的这是窗口对象。是,您有一个匿名函数,即在setInterval声明中没有名称的函数,它创建自己的作用域 第一个控制台.log$这将有权访问任何全局的或在其自身内设置的任何内容,第二个控制台.log$这将只有权访问全局变量,正如您所发现的,全局范围内的这是窗口对象。它不在setInterval内,而是在匿名函数内 第一个$this在匿名函数的作用域中。第二个$this在全局范围内。它不是在setInterval内,而是在匿名函数内
第一个$this在匿名函数的作用域中。第二个$this在全局范围内。您可以使用简单闭包,也可以使用$。代理:
类似于…您可以使用简单的闭包,也可以使用$.proxy: 类似于…这是对当前对象的引用。它表示函数的上下文。在我们的示例中,默认引用是全局引用,即窗口对象。 因为setInterval回调是在全局范围内执行的,所以它总是指向窗口对象。 以下是一些示例,说明了这与范围之间的联系:
var a = "window";
function f(){
console.log(this.a);
}
f();// scope = window
var obj = {a:'object',f:f};
obj.f();// scope = object
这是对当前对象的引用。它表示函数的上下文。在我们的示例中,默认引用是全局引用,即窗口对象。
因为setInterval回调是在全局范围内执行的,所以它总是指向窗口对象。
以下是一些示例,说明了这与范围之间的联系:
var a = "window";
function f(){
console.log(this.a);
}
f();// scope = window
var obj = {a:'object',f:f};
obj.f();// scope = object
是的,还请注意,在许多情况下,JQuery会覆盖此内容。是的,还请注意,在许多情况下,JQuery会覆盖此内容。