call 和 apply


call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。

改变函数体内部 this 的指向

//call用法
function changeStyle(attr, value){
    this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
//apply用法
window.changeStyle.apply(box, ['height', '200px']);

获取数组中的最大值和最小值

var maxNum = Math.max("5, 458 , 120 , -215")//458
//number 本身没有 max 方法,但是 Math 有
var numbers = [5, 458 , 120 , -215 ]; 
var maxNum = Math.max.call(Math,5, 458 , 120 , -215); //458,用call没什么意义因为参数不是数组可以直接用Math.max
//获取数组中的最大值和最小值
var maxNum = Math.max.apply(Math, numbers),   //458


bind()改变上下文环境之后是回调执行 apply & call 则会立即执行函数

var obj = {
    x: 81,
};
var foo = {
    getX: function() {
        return this.x;
    }
}
console.log(foo.getX.bind(obj)());  //81
console.log(foo.getX.call(obj));    //81
console.log(foo.getX.apply(obj));   //81

2017/2/28

原文地址:https://www.cnblogs.com/papi/p/6527201.html