范围,或确定变量所在位置的一组规则,是任何编程语言的最基本概念之一。事实上,它是如此基本,以至于我们很容易忘记这些规则是多么微妙!
准确理解JavaScript引擎如何“思考”作用域将使您避免编写提升可能导致的常见错误,让您做好准备专注于闭包,并让您离永远不再编写错误更近一步再次。
...无论如何,它会帮助您理解提升和关闭。
在本文中,我们将了解:
立即学习“Java免费学习笔记(深入)”;
- JavaScript中作用域的基础知识
- 解释器如何决定哪些变量属于哪个作用域
- 吊装的实际工作原理
- ES6关键字let和const如何改变游戏规则
让我们深入探讨。
如果您有兴趣了解有关ES6的更多信息以及如何利用语法和功能来改进和简化JavaScript代码,为什么不看看这两门课程:
词法范围
如果您之前编写过一行JavaScript,您就会知道定义变量的位置决定了您可以使用的位置>他们。变量的可见性取决于源代码的结构,这一事实称为词法范围。
在JavaScript中创建作用域有三种方法:
- 创建函数。在函数内部声明的变量仅在该函数内部可见,包括在嵌套函数中。
- 使用let或const在代码块内声明变量。此类声明仅在块内可见。
- 创建catch块。不管你相信与否,这实际上确实创建了一个新的范围!
cript;toolbal:false;">"usestrict";varmr_global="MrGlobal";functionfoo(){varmrs_local="MrsLocal";console.log("Icansee"+mr_global+"and"+mrs_local+".");functionbar(){console.log("Icanalsosee"+mr_global+"and"+mrs_local+".");}}foo();//Worksasexpectedtry{console.log("But/I/can'tsee"+mrs_local+".");}catch(err){console.log("Youjustgota"+err+".");}{letfoo="foo";constbar="bar";console.log("Icanuse"+foo+bar+"initsblock...");}try{console.log("Butnotoutsideofit.");}catch(err){console.log("Youjustgotanother"+err+".");}//ThrowsReferenceError!console.log("Notethat"+err+"doesn'texistoutsideof'catch'!")