call()、apply()、bind()作用和区别
一、call() 、apply()
作用:让函数在某个指定的对象下执行
var obj = {x: 1} function foo() {console.log(this.x)} foo.call(obj) //打印结果: 1
call() 和apply()的第一个参数相同,就是指定的对象。这个对象就是该函数的执行上下文。
两者区别:参数的传递方式不同,apply()参数以数组的形式传递
var obj = {}; function foo(a, b, c) { console.log(b); } foo.call(obj, 1, 2, 3) //打印结果: 2;
var obj = {}; function foo(a, b, c) { console.log(b); } foo.apply(obj, [1, 2, 3]) 打印结果: 2;
function log(){ console.log.apply(console, arguments); }; log(1); //1 log(1,2); //1 2
二、bind()
bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同