您的位置:首页> 前端教程> JS教程
文章导航

JavaScript 作用域

2018-8-16 00:14| 作者: admin| 查看: 2263| 评论: 0|来自: 蚂蚁部落

在MDN或者其他权威教程上,对于作用域的解释无一例外是与可见性和生命周期相关。

作为最重要的概念之一,初学者往往会惑于上述高大上的理论阐述。

所以从浅显处入手,可能更有助于对于概念的入门和深入理解。

作用域通俗的讲就是变量或者函数的“势力范围”,在此范围内,变量可以被引用,函数可以被调用。

JavaScript具有两种作用域:

(1).全局作用域。

(2).函数作用域。

特别说明:ES2015新增块级作用域,具体可以参阅JavaScript 块级作用域一章节。

函数中声明的变量是局部变量,当然必须使用var声明,否则也是一个全局变量,代码如下:

[JavaScript] 纯文本查看 复制代码
function func(){
  var webName="蚂蚁部落";
  address="青岛市南区";
}

两个变量虽然都是在函数中声明,但webName是局部变量,address是全局变量。

全局变量在整个代码中都是可见的,局部变量仅能在声明变量的函数(包括嵌套在其中的函数)中使用。

再来看一段代码:

[JavaScript] 纯文本查看 复制代码
function func(){
  var webName="蚂蚁部落";
   
  function funcInner(){
    var target="分享互助";
  }
}

变量webName可以在函数func和funcInner中应用,但变量target只能够在funcInner中使用。

全局变量是window对象的属性,"势力范围"是整个代码。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
var antzone="分享互助";
function func(){
  var webName="蚂蚁部落";
}
console.log(window.antzone);

作用域链:

作用域链是查找一个变量的时候,一层一层的向上形成的查找轨迹,类似于一个链子一样。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
var antzone="蚂蚁部落";
function box(){
  var a="box函数";
  function middle(){
    var b="middle函数";
    function inner(){
      console.log(antzone);
    }
    inner();
  }
  middle();
}
box();

将要打印antzone时,首先会在当前inner函数作用域中查找,没有找到,则向上在middle函数作用域中查找,没有查找到,再向上在box中查找。依然没有查找到,最后在全局作用域中查找,这样就形成作用域链效果。

更多关于作用域链内容可以参阅JavaScript作用域链接一章节。

6

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (6 人)

最新评论

返回顶部