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

发布时间:2019-06-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了深入理解JavaScript (3) —— 作用域脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

针对有经验的开发者,纠正一个过时的理解:你可能听过这句话“javascript没有块级作用域”。所谓“块”,就是大括号“{}”中间的语句。诚然,在ES6之前,这句话是完全正确的,但ES中新增的两个命令letconst改变了这种状态,使得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皆是全局作用域中的全局变量。

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

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

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

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

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

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

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

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

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

脚本宝典总结

以上是脚本宝典为你收集整理的深入理解JavaScript (3) —— 作用域全部内容,希望文章能够帮你解决深入理解JavaScript (3) —— 作用域所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。