在js中使用关键字this声明变量

时间:2009-02-19 12:33:11

标签: javascript jquery

这是否有区别:

var onClick = function() {

     var image = .....

     $.post("/..../...", null, function(data) { myCallback(data, image); } );
}

var onClick = function() {

     this.image = .....

     $.post("/..../...", null, function(data) { myCallback(data, this.image); } );
}

我使用'this'方式,由于某种原因,我传入myCallback的任何参数都是null ??

如果我使用alert在$ .post调用之前输出变量,我得到一个值,因此它不为空?

3 个答案:

答案 0 :(得分:1)

当时......

function(data) { myCallback(data, this.image); }

...将被执行(在ajax调用完成之后),执行上下文被更改。它将在jQuery对象上下文中。所以在这一点上,这个=== jQuery,正如你已经看到的那样,没有图像属性。因此,错误。

顺便说一句,google for JavaScript关闭并尝试理解它们。这正是你的问题所在。

答案 1 :(得分:0)

使用'var'声明变量将起作用,这要归功于你正在创建的sol-called'closure'。 'this'关键字指的是当前作用域的对象,根据具体情况,它可能引用函数,窗口对象或任何其他对象。一旦回调方法触发,这个范围最明确地会有所不同,因此不可靠。

答案 2 :(得分:0)

如果你想让onClick函数表示一个类(似乎不太可能),“this”既适合作为指示符,又作为公开实例属性的手段(因为在类实例中声明的var实际上是私有的)

如果你不打算用onClick来表示一个类,那么这完全是不合适的,因为它会产生一个令人困惑的信号并混淆上下文的足迹(无论上下文是什么)。