箭頭函數詳解

箭頭函數與普通函數不同

1:箭頭函數不能使用new

2:箭頭函數不能使用arguments,使用 rest參數 …

var a = (...A)=>{
    console.log(A)
}

3:箭頭函數指向
先看一個栗子

var obj = {
    a:10,
    b()=>{
        console.log(this.a); //underfined
        console.log(this); //widow
    },
    c:function(){
        console.log(this.a); //10
        console.log(this);//obj
    }
}

在我的理解裏面 箭頭函數指向爲同級,普通方式的上一級
實際上:箭頭函數不定義this

4:沒有原型屬性

5:不能使用generator 和 yield

ps:終於理解 this在箭頭函數中指向上下文,而在普通函數中誰調用指向誰。

1.箭頭函數的this綁定看的是this所在的函數定義在哪個對象下,綁定到哪個對象則this就指向哪個對象

2.如果有對象嵌套的情況,則this綁定到最近的一層對象上

題外:
如何想獲得傳入的參數
var a = function(1,…,50){};
可以通過arguments獲得

構造函數:
函數創建有兩種方式:
var a = function(){};
function A (){};
var as = new A();
第二種可以通過new 創見一個新的函數;
使用內部的字符串函數創建一個字符串對象

下面幾個例題吧[:https://blog.csdn.net/u013344815/article/details/73184928/]

var obj = {
    fn:function(){
        console.log(this); //指向obj,這個函數本身
    }
}

var obj = {
    fn:function(){
        setTimeout(function(){
            console.log(this); //window
        })
    }
}
this指向最外層window,this出現在setTimeout()中沒有被調用
如果這裏使用箭頭函數又指向了obj本身。
var obj1 = {
    num:3,
    fn:function(){
        setTimeout(function(){
            console.log(this.num); //undefined
        })
    }
}
var obj1 = {
    num:4,
    fn:function(){
        setTimeout(()=>{
            console.log(this.num); //4;
        })
    }
}
在沒有箭頭函數的情況下,this指向window,在使用箭頭函數的情況下,this指向obj
var obj1={
	num:4,
	fn:function(){
		var f=() => {    //object,也就是指obj1
			console.log(this);
			setTimeout(() => {
				console.log(this);// //object,也就是指obj1
			});
		}
		f();
	}
}

var obj1={
	num:4,
	fn:function(){
		var f=function(){    
			console.log(this); //window,因爲函數f定義後並沒有對象調用,this直接綁定到最外層的window對象
			setTimeout(() => {
				console.log(this);//window,外層this綁定到了window,內層也相當於定義在window層(全局環境)
			});
		}
		f();
	}
}
改變f箭頭函數之後this指向window,因爲沒有定義

var obj1={
	num:4,
	fn:function(){
		var f=() => {    
			console.log(this); //object,f()定義在obj1對象中,this就指向obj1,這就是箭頭函數this指向的關鍵
			setTimeout(function() {
				console.log(this);//window,非箭頭函數的情況下還是要看宿主對象是誰,如果沒有被對象調用,函數體中的this就綁定的window上
			});
		}
		f();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章