函数的执行过程

在 JavaScript 中,一个函数的执行过程分为两个阶段:(1)建立执行环境;(2)执行函数代码。

在建立执行环境(execution context)的阶段,函数将初始化各种变量,并将它们记录在一个内部的变量对象(variable object)中。记录在该变量对象中的变量依次有下面三种:(a)函数的实际参数;(b)内部的函数声明;(c)内部的变量定义。这个阶段结束之后前面两种变量有了具体的值,而最后一种变量的值总是 undefined。在执行函数代码阶段,当函数执行到 var 语句时,这种变量才有了具体的值。例如:

function hello(a) {
  alert(a+b()); // HelloWorld  
  alert(c);     // undefined
  alert(d);     // undefined

  var c = "Some";

  var d = function() {
    return "Thing";
  }

  alert(c+d()); // SomeThing  

  function b() {
    return "World";
  }
}

hello("Hello");

这里 b 是函数声明,因此可以在 hello 函数的开始时就使用;而 c 和 d 是变量定义,因此在对应的 var 语句之后才有具体的取值。

JavaScript 这种特点,使得在使用后面才声明或定义的变量时不会出错。

参考资料:
[1] ECMA-262-3 in detail. Chapter 2. Variable object
[2] ECMA-262-3 深入解析.第二章.变量对象
[3] 深入理解JavaScript系列(12):变量对象(Variable Object)

原文地址:https://www.cnblogs.com/zoho/p/2439251.html