本文作者:DurkBlue

JavaScript的所有作用域推荐

DurkBlue 2020-02-23 1603 抢沙发
JavaScript的所有作用域摘要: 在一个JS代码的运行环境下,分全局作用域、局部作用域、块级作用域。例如,常用的浏览器运行环境中,一个浏览器窗口(浏览器标签页)为一个全局作用域。全局作用域之间,是独立运行的,因此不...

在一个JS代码的运行环境下,分全局作用域、局部作用域、块级作用域。

例如,常用的浏览器运行环境中,一个浏览器窗口(浏览器标签页)为一个全局作用域。

全局作用域之间,是独立运行的,因此不可能只通过JavaScript代码就去实现两个全局作用域之间的通信。

因此,运行JavaScript的环境,只会存在一个全局作用域;但会存在多个局部作用域(块级作用域),局部作用域中可以继续包含局部作用域(块级作用域)。

JavaScript的所有作用域  第1张

作用域主要影响变量的引用,通常解释为可访问变量的集合。

因此,在ES6之前,没有块级作用域,只有全局作用域和局部作用域;局部作用域的范围是在整个函数方法中。

ES6以后,变量声明增加const和let,新增的这两个变量声明语句,使得变量仅在作用域范围内有效声明。

一个简单的示例:

JavaScript
复制
var a = 1;if (true) {
    var a = 2;}console.log(a); // 输出2

为什么会这样?因为var声明的变量提升了。

JavaScript
复制
var a = 1;if (true) {
    let a = 2; // const 也一样}console.log(a); // 输出1

那么在,ES6+语法中,如何识别一个块级作用域?

简单的来说,一对花括号中的代码块(Block语句)为块级作用域;当然,如果是循环语句中的花括号,每一次循环为一个块级作用域。


那么在作用域中的“骚”操作:

使用未声明的变量名(非数字),去赋值或执行方法,会调用this中的可用属性或方法。

简易示例

JavaScript
复制
!function() {
    this.aaa = '123';
    console.log(aaa); // 输出 111}();
此篇文章由DurkBlue发布,撰文不易,转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 2020-02-23
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(1)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论取消回复

快捷回复:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog

评论列表 (暂无评论,1603人围观)参与讨论

还没有评论,来说两句吧...