js閉包中的this(匿名函數中的this指向的是windows)


js閉包中的this(匿名函數中的this指向的是windows)

一、總結

1、普通函數中的this指向的是對象,匿名函數中的this指向的是windows,和全局變量一樣

2、讓匿名函數中的this指向對象的兩種方法

  • 可以使用對象冒充強制改變this的指向
  • this賦值給一個變量,閉包訪問這個變量

 

二、js閉包中的this

閉包中的this問題

  • 之前的課程中講過this是在運行時基於函數的執行環境來綁定的
  • 全局函數中的this是window,而當函數作為某個對象的方法調用時,this就是指的那個對象......
  • 匿名函數的執行環境具有全局性,this通常是指向window的。
    • 可以使用對象冒充強制改變this的指向
    • 將this賦值給一個變量,閉包訪問這個變量

 

三、代碼

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4   <meta charset="utf-8">
 5   <title>課堂演示</title>
 6 </head>
 7 <body>
 8   <script>
 9   /*
10       var name='The Window';
11       var obj=new Object();
12       obj.name='my obj';
13       obj.get=function(){
14           return this.name;
15       }
16 
17       var obj={
18       name:'my obj',
19       get:function(){
20           return this.name;
21         }
22       }
23       alert(obj.get())  //返回 'my obj' 24 
25     var name='The Window';
26     var obj={
27       name:'my obj',
28       get:function(){
29           return function(){
30             return this.name;
31           }
32         }
33       }
34 
35  alert(obj.get()()) //這次返回的是全局變量 'The Window' 36       alert(obj.get().call(obj))//這次又返回的是'my obj',因為call()強制改變了this的指向
37   */
38   var name='The Window';
39     var obj={
40       name:'my obj',
41       get:function(){
42         //這里的this指的是對象,這里為obj
43         var self=this
44           return function(){
45             //閉包里的this指的是window
46             return self.name;
47           }
48         }
49       }
50 
51       alert(obj.get()()) 
52  
53 
54   </script>
55 </body>
56 </html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM