call() 和 apply() 方法
JavaScript中每个Function对象都有call()和apply()方法
语法区别:
function.call( thisObj[, arg1, arg2] );
function.apply( thisObj[, arguments] );
作用:改变this指向 (用另一个对象替换当前对象)
区别:传参列表形式不同
call:接收多个参数,第一个参数是this指向的对象,后面则是一串参数列表;
apply:只接收两个参数,第一个参数是this指向的对象,第二个则是一个数组;
#### apply的一些其他巧妙用法:
1. Math.max 来求数组中最多的值
Math.max(parm1, parm2, ...); 不支持数组的形式
Math.max.apply(null, array);
2. Array.prototype.push可以实现两个数组的合并
.push(parm1, parm2, ...); 不支持数组的形式
arr.push.apply(null, arr2);
一般在目标函数需要n个参数列表,而又不接收数组的形式,可以通过apply的方式巧妙的解决这个问题。
----------------------------------------
this
1. 函数预编译过程中 this => window
2. 全局作用域里 this => window
3. call/allpy 可以改变函数运行时this指向
4. obj.func(); func()里面的this指向obj,谁调用就指向谁
arguments
指向函数自身引用
argument.callee
在立即函数中调用自己,实现递归
var num = (function (n) {
if(n == 1){
return 1;
}
return n * arguments.callee(n-1);
}(20));