JavaScript的静态作用域(又称为词法作用域)

所谓静态作用域,是相对于动态作用域而言的,是指变量的作用域是在代码编译阶段确定的,又称之为词法作用域,而动态作用域语言的变量作用域是在代码执行阶段确定的,这里不论。

理解JavaScript静态作用域的关键在于理解变量的作用域是由使用该变量的源代码位置确定,而不是由调用该变量时候的位置确定,举例如下:

var v="out";
function outside(){
  var v="in";
  return inside();
}
function inside(){
  return v;
}
outside();

比较

var v="out";
function outside(){
  var v="in";
  function inside(){
    return v;
  }
  return inside();
}
outside();

第一段代码的执行结果是"out",而第二段代码的执行结果是"in"。
区别的关键就在于inside()函数的定义位置,第一段代码inside()函数定义在outside()函数的外层,因此该函数内使用的v变量的作用域链只包含inside()内和顶层,因此它的值为"out",而第二段代码的inside()函数定义在outside()函数内部,此时该函数使用的v变量作用域链包含了inside()函数内部,outside()函数内部以及顶层,并且是按顺序查找的,所以此时v的值为outside()内部赋值的"in"。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容