作家
登录

换个思路理解Javascript中的this

作者: 来源: 2017-07-27 09:43:11 阅读 我要评论

是以这段代码我们存眷的部分只有:

  1. (function(){ 
  2.     console.log(this.x); 
  3. })();  

与通俗函数调用一样,创建一个虚拟高低文对象,然后通俗函数作为这个虚拟高低文对象的办法急速调用,匿名函数中的 this 也就指向了这个虚拟高低文。

  1. var x = 1; 
  2. function getX(){ 
  3.     console.log(this.x); 
  4. getX();  

参数中的this

  1. var x = 1; 
  2. var foo = { 
  3.     x: 2, 
  4.     getX: function(){ 
  5.         console.log(this.x); 
  6.     } 
  7. setTimeout(foo.getX, 1000);  

函数参数是值传递的,是以膳绫擎代码等同于以下代码:

  1. var getX = function(){ 
  2.     console.log(this.x); 
  3. }; 
  4. setTimeout(getX, 1000);  

然后我们又回到了通俗函数调用的问题。

大年夜上图中,我们可以看出getX办法的调用者的高低文是foo,是以getX办法中的 this 指向调用者高低文foo,转换成 call 办法为foo.getX.call(foo)。

全局中的 this 指向全局的高低文

  1. var x = 1; 
  2. console.log(this.x); 

  1. var x = 1; 
  2. var a = { 
  3.     x: 2, 
  4.     b: function(){ 
  5.         return function(){ 
  6.             return function foo(){ 
  7.                 console.log(this.x); 
  8.             }         
  9.         } 
  10.     } 
  11. }; 
  12.  
  13. (function(){ 
  14.     var x = 3; 
  15.     a.b()()(); 
  16. })();  

看到膳绫擎的情况是有很多个函数,但我们只须要存眷 this 地点函数的调用方法,起首我们来简化一下如下:

  1. var x = 1; 
  2. (function(){ 
  3.     var x = 3; 
  4.     var foo = function(){ 
  5.         console.log(this.x); 
  6.     } 
  7.     foo(); 
  8. }); 

      推荐阅读

      检察改革的“贵州答卷”——“智慧检务”

    改革大年夜潮,风生水起;蹄疾步稳,行精细远。2014年12月,贵州省作为全国首批司法体系体例改革试点省份之一,率先拉开司改大年夜幕。三年多来,贵州省审查院紧紧抓住完美司法义务制这个&>>>详细阅读


    本文标题:换个思路理解Javascript中的this

    地址:http://www.17bianji.com/lsqh/36427.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)