zoukankan      html  css  js  c++  java
  • this指向函数作用域 yes or no?-------1

    this指向函数作用域,对也错

    function foo(){
      var a=2;

      this.bar();//this 指向window
    }
    function bar(){

      console.log(this.a);//指向window

    }

    foo();   //RegereceError: a is not defined    

    ---------------------------------------------------------默认绑定 :独立函数调用。(不带任何装饰即不被引用的函数引用进行调用)↓

    function foo(){
      console.log(this.a);  //this指向window
    }
    var a=2;

    foo();//2    

    ------------------------严格模式下 ↓
    function foo(){

      'use strict';//严格模式下,全局对象不能进行默认绑定

      console.log(this.a);//this指向undefined

    }

    var a=2;

    foo();// typeError:this is undefined

    ---------------------------------------------------------隐式绑定↓

    funcction foo(){

      console.log(this.a);//指向foo的调用者    即obj    

    }

    var obj={

      a:2,

      foo:foo

    }

     obj.foo();//  2        obg下的foo调用    foo不属于obj   而是指向了obj

    ---------------------↓对象属性引用链中只有最顶层或者说最后一层会影响调用位置

    function foo(){

      console.log(this.a);//this指向obj2

    }

    var obj2={

      a:42,

      foo:foo

    }

    var obj1={

      a:2,

      obj2:obj2

    }

    obj1.obj2.foo();   //42   理解:最终foo的上下文是obj2的作用域 即直接引用的obj2  this指向obj2

    -----------**?**----------↓this 绑定被隐式绑定的函数会丢失绑定对象,也就是说它会应用默认绑定,从而把this绑定到全局对象或者undefined上,这取决于是否是严格模式

    function foo(){

      console.log(this.a);

    }

    var obj={

      a:2,

      foo:foo

    };

    var bar=obj.foo;  //obj.foo   this指向obj的此法作用域       bar=obj.foo 把foo函数的引用指向了全局对象bar   即this指向了window

    var a='oppsGlobal';

    bar();//'oppsGlobal'

     同样的函数调用结果----↑↓

    function foo(){

      console.log(this.a);

     var obj={

      a:2,

      foo:foo

    };

    var a="oopsGlobal";

    setTimeout(obj.foo,100);// 'oppsGlobal'

    理解:setTimeout内部实现机制类似:

     setTimeout(fn,time);

     function setTimeout(fn,time){

      fn();//this指向window;
      }

  • 相关阅读:
    Wijmo 更优美的jQuery UI部件集:从wijwizard和wijpager开始
    设计规范基础
    libgdx的tmx地图处理工具gdxtiledpreprocessor.jar(TiledMapPacker)修正版
    Zookeeper简介
    翻译:Contoso 大学 6 – 更新关联数据
    jquery 插件ztree的应用简单的树(tree)
    使用EF构建企业级应用
    可复用的WPF或者Silverlight应用程序和组件设计(1)——应用程序级别
    Castor简单介绍
    Eclipse各种书籍资料整理包括书籍介绍和下载
  • 原文地址:https://www.cnblogs.com/trend/p/7527266.html
Copyright © 2011-2022 走看看