• (九)执行上下文&变量提升案例分析


    执行上下文的三个重要属性:
    • 变量对象VO (变量;函数声明;函数的形参)
    • 作用域链(JS采用词法作用域;其作用域在其定义时候就已经决定)
    • this

    在生成上下文的时候会有两个阶段

    • 第一阶段(创建阶段):
      • JS解释器会找出需要变量提升的变量以及函数,给他们开辟好内存空间
      • 函数会整个存进去
      • 变量只声明并且赋值为undefined
      • 变量提升过程中;相同函数会覆盖上一个函数并且函数优先于变量提升
    b() // call b
    console.log(a) // undefined
    
    var a = 'Hello world'		//变量声明并赋值为unedfined
    
    function b() {				//创建VO时候偶函数整个保存
    	console.log('call b')
    }
    
    • 第二阶段(代码执行阶段)
    b() // call b second
    
    function b() {
    	console.log('call b fist')
    }
    function b() {					//变量提升;同样函数后面一个会覆盖前面一个
    	console.log('call b second')
    }
    var b = 'Hello world'
    
    注意
    • let不能在声明前使用;let并非是没有变量提升才不能在声明前使用;而是let提升了声明但是并没有赋值,其不能在声明前使用是因为临时死区
  • 相关阅读:
    Lyndon Word & The Runs Theorem
    Codeforces 1477F. Nezzar and Chocolate Bars
    Codeforces Round #700 (Div.1)
    kubeadm 安装 k8s
    centos7更新阿里yum源
    CF1186 F. Vus the Cossack and a Graph
    CF1152 D. Neko and Aki's Prank
    CF803 C. Maximal GCD
    CF1180 B. Nick and Array
    CF1186 D. Vus the Cossack and Numbers
  • 原文地址:https://www.cnblogs.com/smileyqp/p/12675330.html
Copyright © 2020-2023  润新知