如何理解js中的作用域

235 阅读2分钟

一.背景介绍

什么是作用域呢,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

二.知识剖析1.全局作用域(Global Scope)在代码中任何地方都能访问到的对象拥有全局作用域,一般来说一下几种情形拥有全局作用域:(1)在函数外面定义的变量拥有全局作用域,例如:

var authorName ="山边小溪";

function doSomething(){

    alert(authorName);

}
doSomething();

(2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:

 function doSomething(){
     var authorName="山边小溪";
     blogName="梦想天空";
     alert(authorName);
 }
 doSomething();//山边小溪
 alert(blogName);//梦想天空

变量blogName拥有全局作用域,而authorName在函数外部无法访问到。

  1. 局部作用域(Local Scope)和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域成为函数作用域例如下列代码中的bName和函数innerSay都只拥有局部作用域:

     function doSomething(){
     varbName="双击66";
         function innerSay(){
             alert(bName);
          }
          innerSay();
     }
     alert(bName);//脚本错误innerSay();
    

//脚本错误作用域链(Scope Chain)说完了作用域我们就可以接着来聊聊作用域链(Scope Chain)这个概念了.作用域链就是由多个作用域组成的 在JS中,函数的可以允许嵌套的。即,在一个函数的内部声明另一个函数.类似这样:

functionA(){    
    var a=1;    
        functionB(){//在A函数内部,声明了函数B,这就是所谓的函数嵌套。
            var b=2;    
        }
    }