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

  • 相关阅读:
    算法导论学习 之 插入排序
    python 的模块导入
    Python 模块的发布与上传
    Python 自学笔记《1》
    linux内核可以接受的参数 | Linux kernel启动参数 | 通过grub给内核传递参数
    Linux系统安装时分区的选择(推荐)
    Oracle 11G在用EXP 导出时,空表不能导出解决
    android TextView属性详解
    android中dip、dp、px、sp和屏幕密度
    android ImageView scaleType属性
  • 原文地址:https://www.cnblogs.com/trend/p/7527266.html
Copyright © 2011-2022 走看看