zoukankan      html  css  js  c++  java
  • Javascript基础系列(三)-执行环境

    数据类型、运行三部曲

    基本类型和引用类型的值

    弱类型语言, 根据实际执行情况转换变量类型

    基本数据类型: 简单的数据段
    null, undefined, number, string, boolean

    引用数据类型: 可能由多个值构成的对象
    object

    内置的封装对象
    Array, Math, RegExp, Date...

    函数参数传递

    形参 引用数据类型,值修改*会*影响实参
    形参 基本数据类型,值修改*不会*影响实参
    

    类型检测

    基本数据类型 typeof  
    引用数据类型 instanceof
    

    执行环境及作用域

    执行环境 EC (excution context)
    决定了变量和函数有权访问的其他数据,决定他们各自的行为,
        每个执行环境都有一个与之关联的变量对象 VO (variable object)。
    但编写的代码无法访问这个对象,但解析器在处理数据时会自动在后台使用它
    
    作用域
    1.变量访问规则的有效范围及函数的有序访问
    2.变量函数定义的时候就确定了作用域链
    3.以栈的形式存储作用域链 如 [windows]->[FunctionA]->[functionB]
    
    执行环境
    1. 全局 Global Code /局部 Function Code
    2. 不存在块级作用域 如下
        
        if( true ) {
        var color = 'red';// 变量作用域并不仅限于if块中, 而是他对应的EC
        }
        alert(color); //依然存在
        
    
    /**
     * AO Activive Object 活动对象
     */
    关于AO与VO
    它们的作用是帮助js引擎在引用变量的时候能够去顺利找到变量。并且它们之间的联系可以实现作用域链。
    
    1. 每个变量或函数定义的时候会在对应的执行环境下生成与之关联的VO
    2. 但函数执行环境的VO对象是无法直接访问的,故每次函数执行时 会根据VO生成一个AO对象
    3. windows指向全局执行环境的GO
    

    运行三部曲

    语法分析
    	检查代码是否有语法错误
    	
    预编译
    	
    事件点:发生在函数执行前
    动作:
    创建AO对象
    找形参和变量申明,将变量和形参名作为AO的属性名,值为undefined
    实参值与形参统一
    在函数体里面找函数申明,值赋值函数体
    
    总结:
    函数申明整体提升
    变量申明提升
    
    解释执行
    读一句执行一句
    
    注意:
    	预编译仅变量申明,函数申明,并不会发生赋值,赋值发生在执行阶段
    	匿名函数function(){}不参与预编译
    

    小结

    数据类型有哪些?以及如何检测数据类型,请自行查阅其他方式检测数据类型
    查询相关资料加深对执行环境的理解
    深刻理解javascript的运行三部曲
  • 相关阅读:
    多线程
    Java命令行传参
    IO流
    集合
    Java基础语法
    常见的数据结构
    泛型
    java 集合重要概念 (Set 的存储内存解析)
    java 集合重要概念 (== 和 equals 解读)
    java 集合重要概念 (实现一个简单的斗地主)
  • 原文地址:https://www.cnblogs.com/pengsn/p/12658067.html
Copyright © 2011-2022 走看看