【问题标题】:Declaring variables using the keyword this in js在js中使用关键字this声明变量
【发布时间】:2009-02-19 12:33:10
【问题描述】:

这有区别吗:

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 的任何参数都是空的??

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

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    当时....

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

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

    顺便说一句,谷歌搜索 JavaScript 闭包并尝试理解它们。这正是您的问题所在。

    【讨论】:

    • 所以从函数内部我应该只使用 var?
    • 是的,var没关系。为什么需要“这个”?
    • 我没有,我看到有人在使用它,但它只是用于类私有变量
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您打算让 onClick 函数表示一个类(似乎不太可能),“this”既可以作为指示符,也可以作为公开实例属性的方法(因为在类实例中声明的 var 实际上是私有的) .

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        相关资源
        最近更新 更多