call、apply、bind總結

"use strict";//告訴當前瀏覽器接下來使用的是嚴格模式進行編寫
var obj = {name: '珠峯培訓'};
function fn(num1, num2){數組

console.log(num1+num2);
console.log(this);

}
fn(100, 200);////this ---> window num1=100 num2=200
fn.call(100, 200);//this --->100 num1=100 num2=undefined
fn.call(obj, 100, 200);//this --->obj num1=100 num2=200瀏覽器

fn.call();//this ---> window 在嚴格模式下this---> undefined
fn.call(null);//this ---> window 在嚴格模式下this---> null
fn.call(undefined);//this ---> window 在嚴格模式下this---> undefined
call和apply方法的做用是如出一轍的,都是用來改變方法的this關鍵字,而且把方法執行,並且在嚴格模式下和非嚴格模式下,對於第一個參數是null/undefined這種狀況的規律也是同樣的;只不過call在給方法傳遞參數的時候,是一個一個傳遞值的,而apply是吧給方法傳遞的參數統一放在一個數組中進行操做。
var returnFn = fn.bind(obj,100,200);
bind:也是用來改變方法中this關鍵字的。只不過bind只是改變了方法中的this關鍵字,而且把參數傳遞過去,可是並無把方法執行,而是返回了咱們改變this關鍵字之後的結果。app

相關文章
相關標籤/搜索