zoukankan      html  css  js  c++  java
  • 变量提升和函数形参

    JavaScript是自上向下执行的,但是在JS代码执行前,会首先进行语法分析,所以事实上JS运行要分为语法分析和执行两个阶段:

    语法分析:

      1、分析形参

      2、分析变量声明(var)

      3、分析函数声明(function)

    具体执行步骤:

      1当函数被执行时,首先创建活动对象AO(Active Object);

      2找函数形参和声明,将变量和形参作为AO属性名,值为undefined

      3接收函数实参,函数属性进行赋值 (这里对象里面的arguments[index]将会和第index个形参指向同一个地址)(arguments为实参列表)

      4.分析函数声明,(没有的同名的变量或函数就进行声明,提升整个函数体;如果有同名的函数或者变量则进行覆盖)

    例子:

    function a(b){
      console.log(b);  //function b(){}
      var b = 'huang';
      console.log(b);  //'huang'
      arguments[0] = 1;
      console.log(b);  //1
      console.log(c);  //function c(){ console.log(41) }
      function b() {};
      function c(){console.log(6564)}
      function c() {console.log(41)}
    }
    a(45);
     
    它实际上的执行步骤是:
    function a(b){
      var b = undefined;
      b = 45;
      b = function b(){};
      //function c() {console.log(6564)}
      function c() {console.log(41)}

      console.log(b);
      b = 'huang';
      console.log(b);
      arguments[0] = 1;
      console.log(b);
      console.log(c);
    }
  • 相关阅读:
    整数幂的求解
    非递归实现不重复序列的全排列(二)
    完整的将日期时间转换为汉字的代码
    如何得到某集合的所有子集合?
    再谈八皇后问题
    大数阶乘的计算(六)
    非递归实现不重复序列的全排列(一)
    非递归实现不重复序列的全排列(三)
    大数阶乘的计算(五)
    关于走楼梯的递归算法
  • 原文地址:https://www.cnblogs.com/lianchenxi/p/9312658.html
Copyright © 2011-2022 走看看