说一下call、apply、bind区别
说一下call、apply、bind区别
共同点:都是来改变this指向
语法:函数.call 、 函数.apply 、 函数.bind
不同点:
1. call和apply是立即执行的。
2. bind返回的是一个函数体,新函数的 this 才会变化,原函数不变,需要()执行函数。
3. apply第二个参数是数组,call、bind是多个参数。
场景:
1. bind :给dom添加一个事件,事件的赋值肯定是函数,这时候要改变this指向并且返回的函数体,必须使用bind
<button id='btn'>按钮</button>
<div id='text'>你好吗</div>
var btn = document.getElementById('btn'),
text = document.getElementById('text');
btn.onclick = function(){
console.log( this.id ); // 点击得到text,不会直接执行
}.bind(text)
如果你用apply(text),那么不用点击,就可以直接得到text
2. apply :
var arr = [1,4,4,545,3,5,435,3];
console.log( Math.max.apply(this,arr) );
3. 剩余情况用call
本文来自博客园,作者:杨建鑫,转载请注明原文链接:https://www.cnblogs.com/qd-lbxx/p/16258117.html