Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于内部函数使用“self=this”和bind(this)之间是否存在显著差异?_Javascript_Performance - Fatal编程技术网

Javascript 对于内部函数使用“self=this”和bind(this)之间是否存在显著差异?

Javascript 对于内部函数使用“self=this”和bind(this)之间是否存在显著差异?,javascript,performance,Javascript,Performance,在JavaScript中,当使用作为回调的内部函数时,例如在自己的环境中运行的AJAX调用,这是窗口对象,不知道它们是在哪里编写的。我看到了两种解决方案: 使用self或that:通过自动装箱self变量完成 var Obj=函数{ var a=1; var subFunc=函数{ var self=这个; $.ajax{ url:'something.x', 成功:functiondata{alertself;} }; } 返回{ 减法:子函数 } }; var o=新的Obj; o、 减记;

在JavaScript中,当使用作为回调的内部函数时,例如在自己的环境中运行的AJAX调用,这是窗口对象,不知道它们是在哪里编写的。我看到了两种解决方案:

使用self或that:通过自动装箱self变量完成 var Obj=函数{ var a=1; var subFunc=函数{ var self=这个; $.ajax{ url:'something.x', 成功:functiondata{alertself;} }; } 返回{ 减法:子函数 } }; var o=新的Obj; o、 减记; 使用bind命令:我不确定这是如何做到的 var Obj=函数{ var a=1; var subFunc=函数{ $.ajax{ url:'something.x', 成功:functiondata{alertthis;}.bindthis }; } 返回{ 减法:子函数 } }; var o=新的Obj; o、 减记;
口译员实际开始口译时有什么区别?这对性能有什么影响?

至少在我工作过的地方,有经验的JS开发人员通常更喜欢绑定

JavaScript作用域一开始很难理解,因为在定义新函数时闭包中不包括它。这可能会让你想放弃,只是创建一个新的局部变量来指向它,但如果你这样做,你会限制自己

一旦你习惯了bind,它的优点就是你能始终如一地使用这种语言

你用JS写了很多类吗?一旦您习惯了绑定,您就知道为什么对对象调用函数不同于将该函数设置为局部变量然后调用它,因为您总是在考虑范围。你总是知道这是从哪里来的,因为你声明了它

您还可以避免声明和读取重复的self以及使代码库混乱的变量所带来的麻烦

bind的缺点是它通常不可用。但是为它写一个polyfill或者在网上找到一个是非常有教育意义的,然后你就再也不用担心它了


我怀疑这两种方式都会对性能产生影响。当然不是典型的日常使用。

至少在我工作过的地方,有经验的JS开发人员通常更喜欢绑定

JavaScript作用域一开始很难理解,因为在定义新函数时闭包中不包括它。这可能会让你想放弃,只是创建一个新的局部变量来指向它,但如果你这样做,你会限制自己

一旦你习惯了bind,它的优点就是你能始终如一地使用这种语言

你用JS写了很多类吗?一旦您习惯了绑定,您就知道为什么对对象调用函数不同于将该函数设置为局部变量然后调用它,因为您总是在考虑范围。你总是知道这是从哪里来的,因为你声明了它

您还可以避免声明和读取重复的self以及使代码库混乱的变量所带来的麻烦

bind的缺点是它通常不可用。但是为它写一个polyfill或者在网上找到一个是非常有教育意义的,然后你就再也不用担心它了

我怀疑这两种方式都会对性能产生影响。当然不是典型的日常使用。

最近一位朋友向我指出了使用var self vs.bind的一个好处

对于Exe:

function () {
  var self = this;

  $('selector').map(function () {
    this.attr('href');

    self.doThis();
  });
}
这样,您就可以使用两个此作用域。我同意另一个答案,那就是它会把事情搞得一团糟,但我想它有它的位置

这里有一个 这几乎是零差异。同样,这是一个非常简单的测试。

最近一位朋友向我指出了使用var self vs.bind的一个好处

对于Exe:

function () {
  var self = this;

  $('selector').map(function () {
    this.attr('href');

    self.doThis();
  });
}
这样,您就可以使用两个此作用域。我同意另一个答案,那就是它会把事情搞得一团糟,但我想它有它的位置

这里有一个
这几乎是零差异。再说一遍,这是一个非常简单的测试。

如果您最终没有使用绑定,我建议您使用绑定,而不是self

这是因为self是window.self中的有效全局变量。
我曾经给我的范围命名为self,有一天我忘记了var self=这一行。。。这并不像您预期的那么容易调试。我现在使用that或me,或者更经常地使用binding。

如果您最终没有使用binding,我建议您使用它而不是self

这是因为self是window.self中的有效全局变量。
我曾经给我的范围命名为self,有一天我忘记了var self=这一行。。。这并不像您预期的那么容易调试。我现在用那个或我,或者更多的时候不用绑定。

你试过吗?你不应该调用.bindself而不是.bindthis吗?@JakubKonecki不,我想应该是这个,因为它被调用了
d在对象文字中,而不是在函数中。@我不知道那是什么。我会调查的。@JakubKonecki,变量在那里是一个复制粘贴错误。代码也像现在一样工作。你试过了吗?你不应该调用.bindself而不是.bindthis吗?@JakubKonecki不,我想应该是这样,因为它是在对象文本中调用的,而不是在函数中调用的。@VisioN我不知道那是什么。我会调查的。@JakubKonecki,变量在那里是一个复制粘贴错误。代码的工作方式与现在一样。