zoukankan      html  css  js  c++  java
  • 关于自由变量和this的取值

    1. 自由变量取值由函数定义时决定
    2. this的取值由函数执行时决定,箭头函数的this永远是其上一级的作用域this的取值
    /*
    自由变量
    */
    let a = 100 function retrunA() { console.log(a) } function retrunB() { let a = 200 retrunA() }
    retrunB()
    //结果a=100

    /*
    this的指向
    */
    this.b = 1 function A() { const bb = new B() console.log('bb.b:' + bb.b) } function B() { console.log(this.b) setTimeout(() => { console.log('箭头函数:', this.b) }, 100); setTimeout(function() { console.log('setTimeout:', this.b) }, 5000); this.b = 2 } A() console.log('this:', this)

    /*
    执行过程分析:
        全局执行this.b = 1
        全局定义函数A()
        全局定义函数B()
        全局执行A()
            A中执行B()
                B中执行 console.log(this.b),this是指向B --》 打印1: undefined
                B中执行 setTimeout(() => {console.log('箭头函数:', this.b)}, 100),回调中this是指向B --》 web api入栈此条,待触发执行() => {console.log('箭头函数:', this.b)}
                B中执行 setTimeout(function() {console.log('setTimeout:', this.b)}, 500),回调中this是指向定时器Timeout--》 web api入栈此条,待触发执行function() {console.log('setTimeout:', this.b)}
                B中执行 this.b = 2,b:{b:2}
             A中执行console.log('bb.b:' + bb.b), bb是指向B--》打印2: 'bb.b: 2'
        全局执行 console.log('this', this) --》打印3:'this:{ b: 1 }'
        100 ms后执行console.log(this.b), this是指向B--》打印4: '箭头函数: 2'
        100 ms后执行func() --》执行console.log(this.b), this是指向定时器Timeout--》打印5: 'setTimeout: undefined'

    执行结果:
     undefined
     bb.b: 2
     this:{ b: 1 }
     箭头函数: 2
     setTimeout: undefined

     */

      

  • 相关阅读:
    全选。取消
    Js获取下拉框的值和文本select
    回调函数
    js判断浏览器
    JS获取活动区域高和宽
    判断身份证
    Linux驱动架构之pinctrl子系统分析(一)
    Android的开机启动流程
    Android中getprop命令的使用
    C运算符优先级和结合性
  • 原文地址:https://www.cnblogs.com/baixinL/p/13825831.html
Copyright © 2011-2022 走看看