• js的解析--预处理(三)


    js的解析与执行过程  分全局  {预处理阶段和执行阶段}  函数{预处理函数和执行阶段}
     
    1/创建词法环境(环境上下文)
    LexicalEnvironment   === window
    {
    }
    用声明的方式创建的函数还会被加到词法环境中:
     
    1。用var 定义的变量
    比如定义了var a=5
    function  xxx(){}
    2。var g = function () {}//函数表达式
    在词法环境中就会有:a:undefined   xxx : 对函数的一个引用
     
    f();
    g();
    function f(){}
    var g = function  () {}
    执行时:f可以执行。g报错(不是使用的声明的方式创建的,在预处理的阶段是undefaule,所以报错)
     
    3。处理函数声明右冲突,会覆盖 
         处理变量时右冲突,会覆盖
    alert(f);
    function f() {console.log('111')};
    var f=5;
     
    alert(f);
    var f=5;
    function f() {console.log('111')};
    都是输出function f() {console.log('111')};   结论就是:函数是一等公民
     
    例子:
    alert(a);
    //alert(b);   报错
    alert(f);
    alert(g);
    var a = 5;
    b = 6;
    alert(b);
    function f() { console.log ('f')};
    var g = function g() { console.log ('g')};
    alert(g);
     
     
    undefault
    function f() { console.log ('f')};
    undefault
    6
    function g() { console.log ('g')}
     
     
    4/在函数的预处理阶段,每调用一次,产生一个词法环境,其他跟全局一样
    function f(a,b)
    {
         alert(a);
         alert(b);
         var b = 100;
         function a(){}
    }
     f(1,2);
    =>funtion  =>2
     
    5/如果没有用var声明的变量,会被成为最外部LexicalEnvirment成员
    function f1(){
         function f2 (){
         b = 100;
         }
         f2();
    }
    f1()
     
    window.b
    =>100
     
     
     
  • 相关阅读:
    wordpress升级需设置ftp的解决方法
    用命令创建MySQL数据库
    MySQL创建用户与授权
    MySQL基本命令和常用数据库对象
    转换说明符和转换说明修饰符
    html-webpack-plugin
    数据库-之MySQL的dos命令
    浅谈Java拆箱、装箱
    Java基础问题10问
    Java单例类
  • 原文地址:https://www.cnblogs.com/chenjinxinlove/p/5199632.html
Copyright © 2020-2023  润新知