详解JS作用域

作用域链是由于js的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是window对象的属性,所以这些对象的关系可以看作是一条链

详解JS作用域

作用域分类:

  • 全局作用域 (整个JS运行环境,最顶层作用域,其声明的函数、变量等都是全局的)
  • 函数作用域 (函数执行时会创建作用域)
  • 块级作用域 ({ }大括号在 let、const关键字特性产生的作用域)

JS属于编译语言,逐行执行;编译的过程分为三部分:

示例:

var a = 1;

编译过程:

执行过程:

注意:取值和赋值都是RHS,变量声明和形参是LHS;RHS和LHS发生在执行过程中。

示例:

function foo(a) {
   var b = a;
   return a + b
}
var c = foo(2)

3处LHS查询:

var c 声明

var b 声明
形参 a 声明

4处RHS查询:

foo(2) 取值foo并执行var b = a语句,取值aa + b语句,取值aa + b语句,取值b

用var声明的变量会进行变量提升,提升到当前作用域的最顶部,其值是undefined,因此在变量前进行取值不会报错。 非严格模式下对没有用var关键字声明的变量语句之前进行RHS,报ReferenceError异常。如果是之后进行RHS,会先进行LHS,如果当前作用域还是全局作用域下都没有找到,会自动创建一个全局变量并返回,严格模式下LHR查询失败时,并不会创建一个全局变量并返回,报ReferenceError异常。 变量的访问权限问题:

块级作用域里的变量外层作用域是无法访问,变量是指由let,const。 函数的形参和变量,内部函数是外层作用域无法访问,属于局部变量。变量是指由let,const,var,function声明的。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部