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;
      }

  • 相关阅读:
    elasticsearch 基础 —— 集群原理
    剑指 offer set 10 栈的压入、弹出序列
    剑指 offer set 9 包含min函数的栈
    剑指 offer set 8 树的子结构
    剑指 offer set 7 调整数组顺序使奇数位于偶数前面
    剑指 offer set 6 打印从 1 到 N 的所有数
    剑指 offer set 5 二进制中 1 的个数
    剑指 offer set 4 矩形覆盖
    剑指 offer set 3 旋转数组的最小数字
    剑指 offer set 2 从头到尾打印链表
  • 原文地址:https://www.cnblogs.com/trend/p/7527266.html
Copyright © 2011-2022 走看看