zoukankan      html  css  js  c++  java
  • js执行环境的周边概念

    一、熟悉几个名词:

    1、执行环境(execution context),也叫执行上下文,每个函数都会有自己的执行环境;当浏览器首次加载脚本时,他将默认进入全局执行环境;如果接下来要调用一个内部函数,则创建一个新的执行环境,并将新建的执行环境压入执行环境栈(execution context stack)的顶部,在函数执行之后,栈将其环境弹出,控制权返回给之前的执行环境。

    2、当代码在一个环境中执行时,每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。然后每进入一个执行环境,这个变量对象就被激活变成活动对象 (activation object),就可以被访问到了。当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链作用是保证对执行环境有权访问的所有变量和函数的有序访问。

    3、执行环境的建立:
         创建:创建作用域链,创建变量、函数、参数,求this的值;
         执行:初始化变量的值和函数引用,执行代码。

    4、变量对象初始化顺序:函数形参 --> 函数声明 --> 变量声明;(也是提升顺序)

         函数声明过程中如果变量对象已经包含了相同名字的属性,则替换它的值

        ② 变量声明过程中如果变量名和已经声明的函数名或者函数的参数名相同,则不会影响已经存在的属性

    二、看一个例子:

    (function() {
        console.log(typeof a); // 'function'
        console.log(typeof b); // 'undefined'
    
        var a = 'a';
    var b = function() { console.log('b') }; function a() { console.log('c') } }());

     由于函数声明优先级高于变量声明,且参见上面②,所以a是function;

     由于b是函数表达式,b相当于一个变量,只不过被赋值了一个函数,而变量在创建阶段被创建并被初始化为undefined,所以函数表达式不提升

  • 相关阅读:
    未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
    SQLServer2008/2012 删除所有表视图存储过程
    u盘启动盘制作工具
    华硕笔记本怎么设置u盘启动(两种方法)
    java listener实现定时任务
    Highcharts简介
    重温css系列01
    webstom 如何获取github上面的项目工程
    js高程 第 4章 变量、作用域和内存问题 【笔记】
    ionic 安装教程
  • 原文地址:https://www.cnblogs.com/colima/p/6739623.html
Copyright © 2011-2022 走看看