函式中的this 箭頭函式相關知識
函式中 this-->普通函式中this不是看它定義時候所處的物件誰呼叫它this就是誰
-
普通函式中 this 是什麼?
- 任何函式本質上都是通過某個物件來呼叫的,如果沒有直接指定就是window
- 所有函式內部都有一個變數this
- 它的值是呼叫函式的當前物件
-
如何確定this的值?
- test(): window
- p.test(): p
- new test(): 新建立的物件(準確說不是p但p最後是指向這個物件的)var p = new test()
- p.call(obj): obj
//
情況1:如果一個函式中有this,但是它沒有被上一級的物件所呼叫,那麼this指向的就是window, 這裡需要說明的是在js的嚴格版中this指向的不是window,但是我們這裡不探討嚴格版的問題,你想了解可以自行上網查詢。
情況2:如果一個函式中有this,這個函式有被上一級的物件所呼叫,那麼this指向的就是上一級的物件。
情況3:如果一個函式中有this,這個函式中包含多個物件,儘管這個函式是被最外層的物件所呼叫,this指向的也只是它上一級的物件
var o = {
a:10, b:{ // a:12, fn:function(){ console.log(this.a); //undefined } }
}
o.b.fn();
儘管物件b中沒有屬性a,這個this指向的也是物件b,因為this只會指向它的上一級物件,不管這個物件中有沒有this要的東西。
//
var o = {
a:10, b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window } }
}
var j = o.b.fn;
j();
**this永遠指向的是最後呼叫它的物件,也就是看它執行的時候是誰呼叫的,例子中雖然函式fn是被物件b所引用,
但是在將fn賦值給變數j的時候並沒有執行所以最終指向的是window**
箭頭函式的特點:
1、簡潔 2、箭頭函式沒有自己的this,箭頭函式的this不是呼叫的時候決定的,而是在定義的時候處在的物件就是它的this
3、擴充套件理解: 箭頭函式的this看外層的是否有函式,
如果有,外層函式的this就是內部箭頭函式的this,( 如果它的外層也是箭頭函式,則繼續向外找) 如果沒有,則this是window。
- 作用: 定義匿名函式
- 基本語法:
- 沒有引數: () => console.log('xxxx')
- 一個引數: i => i+2
- 大於一個引數: (i,j) => i+j
- 函式體不用大括號: 預設返回結果
- 函式體如果有多個語句, 需要用{}包圍,若有需要返回的內容,需要手動返回
- 使用場景: 多用來定義回撥函式