私信我或关注微讯号:猿来如此呀,回复:学习,获取免费学习资源包。在MDN或者其他权威教程上,对于作用域的解释无一例外是与可见性和生命周期相关。
作为最重要的概念之一,初学者往往会惑于上述高大上的理论阐述。
所以从浅显处入手,可能更有助于对于概念的入门和深入理解。
作用域通俗的讲就是变数或者函式的“势力范围”,在此范围内,变数可以被引用,函式可以被呼叫。
JavaScript具有两种作用域:
(1).全域性作用域。
(2).函式作用域。
特别说明:ES2015新增块级作用域。
函式中宣告的变数是区域性变数,当然必须使用var宣告,否则也是一个全域性变数,程式码如下:
`function` `func{``var` `webName=``"兴趣部落(网页制作)"``;``address=``"海岛市南区"``;``}`
8
两个变数虽然都是在函式中宣告,但webName是区域性变数,address是全域性变数。
全域性变数在整个程式码中都是可见的,区域性变数仅能在宣告变数的函式(包括巢状在其中的函式)中使用。
再来看一段程式码:
function func{
var webName=``"兴趣部落(网页制作)"``;
function funcInner{
var target=``"分享互助"``;
}
}
变数webName可以在函式func和funcInner中应用,但变数target只能够在funcInner中使用。
全域性变数是window物件的属性,"势力范围"是整个程式码。
程式码例项如下:
var antzone=``"分享互助"``;
function func{
var webName=``"兴趣部落"``;
}
console.log(window.antzone);
作用域链:
作用域链是查询一个变数的时候,一层一层的向上形成的查询轨迹,类似于一个链子一样。
程式码例项如下:
var antzone=``"兴趣部落"``;
function box{
var a=``"box函式"``;
function middle{
var b=``"middle函式"``;
function inner{
console.log(antzone);
}
inner;
}
middle;
}
box;
将要打印antzone时,首先会在当前inner函式作用域中查询,没有找到,则向上在middle函式作用域中查询,没有查询到,再向上在box中查询。依然没有查询到,最后在全域性作用域中查询,这样就形成作用域链效果。
来源网络,侵权联络删除