这是否有区别:
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调用之前输出变量,我得到一个值,因此它不为空?
答案 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来表示一个类,那么这完全是不合适的,因为它会产生一个令人困惑的信号并混淆上下文的足迹(无论上下文是什么)。