今天的面试中,被问到了一个问题:
如果一个函数被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