1. 程式人生 > >js--call、箭頭函數/匿名函數

js--call、箭頭函數/匿名函數

但是 fin 不能 bsp ons 說明 對象方法 define col

js中的this指向(較簡單的幾種):

1.普通函數的this指向window;

2對象方法指向當前對象;

3.()=》箭頭函數指向定義時的對象;

apply和call可以改變當前的this指向,但是不能改變箭頭函數的指向

function foo() {
  return () => {
    return () => {
      return () => {
        console.log(‘id:‘, this.id);
      };
    };
  };
}

var f = foo.call({id: 1});

var t1 = f.call({id: 2})()(); //
id: 1 var t2 = f().call({id: 3})(); // id: 1 var t3 = f()().call({id: 4}); // id: 1

上面舉了個例子,說明箭頭函數的this是不能改變的,相反,如果是普通匿名函數,就可以改變:

function foo() {
  return () => {
    function() {
        console.log(‘id:‘, this.id);
    };
  };
}

var f1 = foo.call({id: 1})()()//undefined;
var f2 = foo().call({id: 1})()//
undefined; var f3 = foo()().call({id: 1})//1

前兩個this最後指向了window,最後一個指向{ID:1}

js--call、箭頭函數/匿名函數