变量提升和函数形参

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