javascript中作用域一般分几种?js中有没有块作用域?

需要明确的是,JavaScript 中的范围管理非常复杂,但实际上非常简单。
主要分为三种类型:全局作用域、局部作用域和块级作用域。
我们先来说说最重要的事情。
全局作用域是在所有函数之外定义的变量,例如使用 var、let 或 const 声明的全局变量。
它们的范围涵盖整个脚本代码。
还有一点是,严格来说,用var定义的全局变量会成为window对象的属性,而用let和const定义的变量则不会。

一开始我以为var、let和const没有太大区别,后来发现错了。
使用let和const声明的环境变量仅从声明点到函数结束有效,不支持变量声明。
然而,用 var 声明的环境变量在整个函数中都有效,并且支持变量声明。
还有另一个重要的细节。
块级分隔符是用 {} 封装的代码块,例如 for、for 等。

等等,还有其他东西。
动态提升是var的一个特点,但却是很多人容易掉进去的坑。
比如我们去年跑的一个项目,由于动态推广出了问题。
大约3 000级数据受到影响。
说实话,非常令人失望。
因此,使用 let 和 const 时要小心,它们不会引入变量,这对于避免错误很有用。

我认为首先值得尝试使用块级作用域变量,因为它们可以避免空间污染并使代码更清晰。
同时,要注意区分var、let和const,尤其是在复杂的函数或代码块中。

js中的var声明的作用

哎呀,当我回想起我第一次编写 JavaScript 时,真是不知所措。
我记得有一次,我在函数中使用 var 声明了一个变量,并且可以在函数外部访问它。
当时我傻乎乎地以为这就是JavaScript的魔力。
后来我才知道,这就是var的“全局作用域”特性。

然后有一次,我在循环中使用var声明一个变量,但每次在循环中它都变成未定义的。
我当时就崩溃了。
后来我了解到这是由于JavaScript的“变量提升”机制造成的。
var 语句被提升到函数的顶部,但赋值仍然存在,导致我每次循环时都无法访问正确的值。

还有一次,我在同一范围内多次声明同一变量。
我当时的想法是var无论如何都可以重复声明。
结果,最后一次赋值每次都会覆盖以前的值,让我不知道变量的值是什么。

我记得有一次,我在声明一个变量后重新声明了它,但变量的值没有改变。
我以为这是某种 JavaScript 功能。
后来我才知道,这是var的“可重新声明”属性。
虽然可以重复声明,但除非显式设置,否则该值不会改变。

但是说实话,自从了解了let和const之后,我用var的次数就少了。
记得有一次,我用let声明了一个变量,然后又在同一个作用域内声明了一个同名的变量。
编译器直接报错。
这让我意识到let和const有多么强大。
它们可以防止变量名称冲突。

现在,我基本上使用let和const来编写JavaScript。
代码更安全且更易于维护。
我就不多说了,因为我用的最多的是let和const,var不敢废话。
哈哈,不过话说回来,这些 var 特性让我在早期编程中陷入了很多陷阱。