2009-02-19 88 views
0

变量声明是否有这之间的差异:使用关键字这JS

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); }); 
} 

我使用的是“本”的方式,出于某种原因,我传递任何参数进入myCallback为空?

如果我使用alert在$ .post调用之前输出变量,那么我得到的值不是null?

回答

1

当时....

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

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

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

+0

所以从函数内我应该只使用var? – mrblah 2009-02-19 12:40:49

0

使用'var'声明变量将工作得益于您正在创建的sol-called'closure'。 'this'关键字指的是当前有作用域的对象,根据情况,它可能引用函数,窗口对象或任何其他对象。一旦回调方法触发并且因此不可靠,该范围将最明显地不同。

0

如果你想让你的的onClick函数来表示一个类(似乎不大可能)“这”是合适的作为这两个指标,并为手段,以暴露实例属性(因为在一个类的实例声明的VAR将有效地私有)。

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