今天的面试中,被问到了一个问题:

如果一个函数被bind绑定了,我再次绑定bind,会改变this指向吗?

我当时回答的是会,现在回头看一塌糊涂。

 

现在把bind绑定的知识点总结一下:

MDN文档中讲解this与bind方法中写道:

“ECMAScript 5 引入了 Function.prototype.bind。调用f.bind(someObject)会创建一个与f具有相同函数体和作用域的函数。
但是在这个新函数中,this将永久地被绑定到了bind的第一个参数,无论这个函数是如何被调用的。”

意思是:bind方法就是新创建一个与函数f具有相同函数体和作用域的函数,然后把新函数的this指向永久绑定为bind的第一个参数,无论新函数如何被调用的,新函数的this指向已永久绑定。

也就是我面试的问题,多次绑定bind会改变this指向吗?

正确回答是:this永远指向第一次bind绑定的函数。

例子:

function f(){
  return this.a;
}
 
var g = f.bind({a:"azerty"});
console.log(g()); // azerty
 
var h = g.bind({a:'yoo'}); // bind只生效一次!
console.log(h()); // azerty
 
var o = {a:37, f:f, g:g, h:h};
console.log(o.f(), o.g(), o.h()); // 37, azerty, azerty
 

  

参考:https://blog.csdn.net/qq_37279880/article/details/104742832

posted on 2020-11-30 15:48  liumcb  阅读(1052)  评论(0编辑  收藏  举报