zoukankan      html  css  js  c++  java
  • JavaScript-深入理解JavaScript(一、预编译和执行过程)

    一、预解析

      JavaScript 在执行前会进行类似“预解析”的操作:首先会创建一个在当前执行环境下的活动对象, 并将那些用 var 声明的变量、定义的函数设置为活动对象的属性, 但是此时这些变量的赋值都是 undefined (只有在运行时才执行赋值操作), 事先构造运行环境例如全局环境, 函数运行环境, 还要构造作用域链

       JavaScript 我们可以直接赋值给没有被 var 定义的变量, 不过此时你这么操作变量, 不管这个操作是在全局作用域里还是在局部作用域里, 变量最终都是属于window对象

    二、解释执行

      在javascript解释执行阶段, 遇到变量需要解析时, 会首先从当前执行环境的活动对象中查找, 如果没有找到‍, 而且该执行环境的拥有者有 prototype 属性时则会从 prototype 链中查找, 否则将会按照作用域链查找, 遇到var a = …这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的, 如果在这之前使用变量, 它的值会是undefined)

    var a = 1;
    function hehe() {
      window.alert(a);
      var a = 2;
      window.alert(a);
    }
    hehe();

    运行结果为:

    "undefined"

    "2"

    原因: 预编译阶段, 局部作用域(here函数内部)下变量 a 被重新定义了, 所以函数内部 a 不再属于全局变量, 而是属于函数作用域, 只不过赋值操作是在运行期执行, 所以第一次使用 a 变量时候, a 变量在局部作用域里没有被赋值, 只有栈区的标示名称, 因此结果就是 undefined 了

  • 相关阅读:
    syslog命令
    linux命令 info
    Alibaba(阿里) RocketMQ入门实例
    java基础-学java util类库总结
    java 23种设计模式教程
    Linux
    Scrapy框架
    MongoDB的安装与使用
    爬虫小案例——爬取天猫
    爬虫小案例——爬取豆瓣电影
  • 原文地址:https://www.cnblogs.com/JohnABC/p/4305240.html
Copyright © 2011-2022 走看看