JavaScript作用域的理解

作用域:就是起作用的区域。JS的作用域规定了变量和函数可访问的范围。
JS作用域分为:全局作用域和局部作用域

  • 全局作用域:定义在外部的函数、定义在所有函数外部的变量、没有用var定义申明的变量和直接定义在window下的属性。均属于全局作用域下。
  • 局部作用域:c/c++的局部作用域主要是块级作用域,就是{}内就是一个作用域,JS不存在块级作用域,主要是函数作用域。函数内定义的变量均属于函数作用域内,函数执行完成后,变量销毁。

函数的作用域体现在定义函数时的环境而不是执行函数的环境。

函数中有一个[[scope]]属性,该属性包含了函数的作用域链scope-chain
函数在被创建的时候把创建时的环境加入到scope-chain中。
函数调用时会生成一个活动对象,将函数的形参作为活动对象的同名属性,并将活动对象置于scope-chain的最前端。
每次发生变量的调用,函数的调用都会进行作用域链查询。

例子:

var name = "window";
function echo = function(){
      alert(name);
}
function eve = function(){
     var name = "eve";
     echo();
}
eve();

解释:函数定义时:

  • echo的scope-chain

    [
    {window}
    ]

  • eve的scope-chain

 [
      {window}
  ]

eve调用时:

  • eve的scope-chain
[
    {name="eve"},
    {widow} 
]

调用echo时:

  • echo的scope-chain
[
    {},
    {widow} 
]

ehco调用alert时在作用域链上寻找name,寻找到的是window中的name。

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

推荐阅读更多精彩内容