资讯专栏INFORMATION COLUMN

深入理解JavaScript (3) —— 作用域

jerry / 1828人阅读

摘要:针对有经验的开发者,纠正一个过时的理解你可能听过这句话没有块级作用域。详见而且,在不使用新语法的前提下,没有块级作用域的正确理解应该是只有全局作用域和函数作用域。各自的作用域下,用各自的。

针对有经验的开发者,纠正一个过时的理解:你可能听过这句话“javascript没有块级作用域”。所谓“块”,就是大括号“{}”中间的语句。诚然,在ES6之前,这句话是完全正确的,但ES中新增的两个命令let和const,改变了这种状态,使得js也有了块级作用域的概念。详见:http://www.cnblogs.com/giggle...

而且,在不使用ES6新语法的前提下,“javascript没有块级作用域”的正确理解应该是“javascript只有全局作用域和函数作用域”。

var a = 1;

if(a) {
    var b = 2;
}

for (var c = 3; c < 10; c++) {
    //......
}

所以,上述代码中的a、b、c皆是全局作用域中的全局变量。

作用域是一个很抽象的概念,类似于一个“地盘”:

如上图,全局代码和fn、bar两个函数都会形成一个作用域。而且,作用域有上下级的关系,上下级关系的确定就看函数是在哪个作用域下创建的。例如,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。

作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。例如以上代码中,三个作用域下都声明了“a”这个变量,但是他们不会有冲突。各自的作用域下,用各自的“a”。

与执行上下文环境的关系:

作用域只是一个“地盘”,一个抽象的概念,代码写完就已经将其确定了,是一直存在的,其中没有变量,要通过作用域对应的执行上下文环境来获取变量的值。

执行上下文环境类似于一个“对象”,代码预处理完才会生成,存在被“创建”或被“销毁”的概念,里边存放声明的变量。

同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。

如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91725.html

相关文章

  • 【进阶2-2期】JavaScript深入之从作用理解闭包

    摘要:使用上一篇文章的例子来说明下自由变量进阶期深入浅出图解作用域链和闭包访问外部的今天是今天是其中既不是参数,也不是局部变量,所以是自由变量。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第二期,本周的主题是作用域闭包,今天是第7天。 本计划一共28期,每期重点攻克一个面试重难点,如果你还不了解本进阶计...

    simpleapples 评论0 收藏0
  • 【进阶2-3期】JavaScript深入之闭包面试题解

    摘要:闭包面试题解由于作用域链机制的影响,闭包只能取得内部函数的最后一个值,这引起的一个副作用就是如果内部函数在一个循环中,那么变量的值始终为最后一个值。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第二期,本周的主题是作用域闭包,今天是第8天。 本计划一共28期,每期重点攻克一个面试重难点,如果你还不了...

    alanoddsoff 评论0 收藏0
  • 深入理解 Javascript作用

    摘要:作用域是门动态语言,跟不一样,可以随意定义全局变量和局部变量,变量会在该作用域下提升,而且没有块级作用域。一预处理作用域解析的作用域只用两种,一个是全局的,一个是函数的,也称为全局作用域和局部作用域局部作用域可以访问全局作用域。 作用域 JavaScript是门动态语言,跟Java不一样,JavaScript可以随意定义全局变量和局部变量,变量会在该作用域下提升,而且JavaScrip...

    banana_pi 评论0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 想阅读更多优质文章请猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见...

    baiy 评论0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 想阅读更多优质文章请猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见...

    ytwman 评论0 收藏0

发表评论

0条评论

jerry

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<