(JS)变量的作用域

JS变量的作用域

整理下在理解JS变量作用域的几个问题:

 一、先来看下变量的声明需要注意的地方

      1.重复的声明和遗漏的声明:使用var语句多次声明同一个变量不仅是合法的,而且也不会造成任何错误。
2.如果尝试读取一个未声明的变量的值,JS会生成一个错误,如果尝试给一个未使用var声明的变量赋值,JS会隐式声明该变量(该变量总是为全局变量,即使只在一个函数体内使用)

二、变量的作用域

 变量的作用域(scope)是程序中定义这个变量的区域,全局变量的作用性是全局性的,局部变量的作用域是局部性的

在函数内部,局部变量的优先级同名的全局变量高,即若一个局部变量与一个全局变量同名,则会有效的隐藏这个全局变量

没有块级作用域,将所有的变量声明集中起来放置在函数的开头是一个好的编程习惯

读取undeclared variable会引起运行时的错误,读取一个unassigned variable会得到默认的undefined。

 三、作用域链(scope chain)

每个JS执行环境都有一个和关联在一起的作用域链,它是一个对象列表或者对象链。当JS需要查询变量X的值时(变量名解析过程(variable name resolution)的过程),它就开始查询该链的第一个对象,若该对象有一个名为X的属性,则采用这个属性的值。否则,JS会继续查询链中的第二个对象,以此类推。附上一张网上的作用域图,来自谷歌图片

(JS)变量的作用域,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。