"var self = this"方法背后的理由是什么?

Sch*_*lle 6 javascript

可能重复:
JS:var self = this?

在查看用JavaScript编写的任意代码时(例如在GitHub上),许多开发人员使用var self = this然后使用self而不是this引用当前对象.

这种方法背后的理由是什么?

Way*_*ett 9

this是上下文.写入var self = this是一种this在一个上下文中保存值的方法,以便可以在另一个上下文中使用.

例:

function Test() {
    var self = this;
    console.log(this);
    setTimeout(function() {
        console.log(this);
        console.log(self);
    }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

打印:

Test {}
Window 11918143#comment15869603_11918143
Test {}
Run Code Online (Sandbox Code Playgroud)

请注意,值this已更改,但我们仍然可以使用引用原始值self.

这是有效的,因为JavaScript中的函数"关闭"它们的词法范围中的变量(这只是说明内部函数可以看到在外部函数中声明的变量的更技术方式).这就是我们写作的原因var self = this; 该变量self可用于所有内部函数,即使这些函数在外部函数返回后很久才执行.


Ble*_*der 5

例如,当您在jQuery中使用回调时,您可能希望引用父函数的this变量,该变量在您处于另一个函数中时会采用不同的值:

$('#foo').click(function() {
  var self = this;

  $.get('foo.php', function(data) {
    // In here, self != this

    $(self).text(data);
  });
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,更换$(self)$(this)是行不通的.基本上,您将存储this在变量中以供以后使用.