1. 程式人生 > >面試超火題 THIS的問題!!!

面試超火題 THIS的問題!!!

this問題

(1)this是js的一個關鍵字,指定一個物件,然後替代this;

函式中的this指向行為發生的主體,函式外的this都指向window,沒有意義

(2)函式內的this跟函式在什麼環境下定義沒有關係,意思就是跟他的作用域沒有關係,

而只跟自己執行時候的主體有關

(3)主體:就是看它前面有沒有點,有點.就是點前面的物件,沒有點.就指向window

(4)自執行函式的時候,裡面的this都指向window

(5)給元素中的某一個事件繫結方法,當事件觸發時,執行繫結的方法,this就指向當前物件

*當函式套函式時,不要管它怎麼定義,而看它執行時候的主體

 

 

this面試題

因為執行test()時,前面沒有 . 所以,test裡的this就指向window,因為x也是window下的變數,所以x就是12

 

因為執行obj.ss()時,ss就相當於把test這個函式賦給了ss,則ss就是一個函式,然後執行obj下的ss,obj下的x為45,則obj()就是45;

執行obj.ss(),有兩個語句,第一個輸出 this指向obj,第二個text(),我們就簡單理解為,不要看它在誰的環境下,就看

它前面有沒有 . ,沒有則是window下的,所以執行test(),this.x就指向window下的x,則為12

 

ss被賦值為obj.dbl obj.dbl就是他在obj下的值,則那個函式,因為賦值給了ss,ss在window下執行的,所以在這個程式碼塊中,第一個輸出的this指obj,第二個輸出的val是當前下面的val,45;最後一句是this下面的,即window,1*2=2.

 

 

 

第一個是執行fun()    首先你要明白前面把a.say他的函式體 賦值給了fun 所以答案是222

第二個執行a.say()   say歸屬a 所以答案就是a裡面的 111

第三個執行b.say(a.say)    但要注意這裡有實參形參  可以直接理解為 fun = a.say 然後返回來在這個匿名函式裡面執行這個fun()

此時的fun就是上面的a.say   但你要明白此時的fun()前面是沒有“.”的他的歸屬是window 所以答案就是222

第四個執行b.say()  在這條上面吧a.say賦值給了b.say所以此時的b.say就是a.say了  如下圖:

所以答案是333

(1)this是js的一個關鍵字,指定一個物件,然後替代this;

函式中的this指向行為發生的主體,函式外的this都指向window,沒有意義

(2)函式內的this跟函式在什麼環境下定義沒有關係,意思就是跟他的作用域沒有關係,

而只跟自己執行時候的主體有關

(3)主體:就是看它前面有沒有點,有點.就是點前面的物件,沒有點.就指向window

(4)自執行函式的時候,裡面的this都指向window

(5)給元素中的某一個事件繫結方法,當事件觸發時,執行繫結的方法,this就指向當前物件

*當函式套函式時,不要管它怎麼定義,而看它執行時候的主體

 

 

this面試題

因為執行test()時,前面沒有 . 所以,test裡的this就指向window,因為x也是window下的變數,所以x就是12

 

因為執行obj.ss()時,ss就相當於把test這個函式賦給了ss,則ss就是一個函式,然後執行obj下的ss,obj下的x為45,則obj()就是45;

執行obj.ss(),有兩個語句,第一個輸出 this指向obj,第二個text(),我們就簡單理解為,不要看它在誰的環境下,就看

它前面有沒有 . ,沒有則是window下的,所以執行test(),this.x就指向window下的x,則為12

 

ss被賦值為obj.dbl obj.dbl就是他在obj下的值,則那個函式,因為賦值給了ss,ss在window下執行的,所以在這個程式碼塊中,第一個輸出的this指obj,第二個輸出的val是當前下面的val,45;最後一句是this下面的,即window,1*2=2.

 

 

 

第一個是執行fun()    首先你要明白前面把a.say他的函式體 賦值給了fun 所以答案是222

第二個執行a.say()   say歸屬a 所以答案就是a裡面的 111

第三個執行b.say(a.say)    但要注意這裡有實參形參  可以直接理解為 fun = a.say 然後返回來在這個匿名函式裡面執行這個fun()

此時的fun就是上面的a.say   但你要明白此時的fun()前面是沒有“.”的他的歸屬是window 所以答案就是222

第四個執行b.say()  在這條上面吧a.say賦值給了b.say所以此時的b.say就是a.say了  如下圖:

所以答案是333