zoukankan      html  css  js  c++  java
  • js 变量提升与函数提升

        //Q:
        var c = 1
        function c(c){
            console.log(c)
            var c = 3
        }
        c(2)
        //A:
        报错
        
        //Ex:
        //1. 解释阶段(预处理)
        var c
        function c(c){
            console.log(c)
            var c = 3
        }
        //2. 执行阶段
        c=1
        c(2) //c is not a function

    提升发生在脚本的解释阶段,提升时,先提升变量,再提升函数。剥离了提升的内容后,剩余的代码按顺序执行。

    提升后的变量和函数放到相应的上下文栈( LIFO )中。

    上下文分为三类:

    1. 全局执行上下文,浏览器中为windows,nodejs中为global

    对以下全局内进行预处理:

    ① 通过 var 声明的变量(代码尚未执行,不进行赋值操作,故而为undefined)

    ② 函数声明

    ③ 将window的地址赋值给this

    前两项会添加到全局对象中,成为执行上下文

    2. 函数执行上下文

    当调用函数时,在函数执行前,对以下内容进行预处理:

    ① 形参赋值

    ② arguments赋值

    ③ var提升(代码尚未执行,不进行赋值操作,故而为undefined)

    ④ 内部声明的函数的提升

    ⑤ 将调用函数的对象的地址赋值给this

    其中前四项会添加到函数执行上下文中

    3. eval上下文

    注: 执行上下文的创建阶段主要负责三件事:确定this---创建词法环境组件(LexicalEnvironment)---创建变量环境组件(VariableEnvironment)

     另可参考:

    一篇文章看懂JS执行上下文

    上下文区别于作用域:

    作用域是静态的,在写代码是就已确定,而上下文随着函数的执行与结束而在上下文栈中创建与销毁。

  • 相关阅读:
    ddos(分布式拒绝服务)攻击防御措施
    arp_announce和arp_ignore 详细解说
    TCP三次握手和四次挥手
    ARP请求详解
    LVS/DR模式原理剖析(FAQs)
    nfs配置 /etc/exports
    LVS集群之十种调度算法及负载均衡-理论
    SSH 故障排查思路
    shell脚本基础和编写规范
    计算机操作系统概述
  • 原文地址:https://www.cnblogs.com/ShengunErshu/p/13815583.html
Copyright © 2011-2022 走看看