在 JavaScript 中,var、const、let 和在变量前不加关键字都用于声明变量,但它们之间存在一些重要的区别。
1、var:
- 使用 var 声明的变量是函数作用域(function-scoped)的。
- 在全局范围内声明的 var 变量会成为全局对象(window 或 global)的属性,这意味着它们可以被全局访问。
- var 声明的变量可以被重复声明,后面的声明会覆盖前面的声明。
- var 变量存在变量声明提升(hoisting)的特性,即变量在其作用域范围内任何位置都可被引用,无论实际声明在哪里。
2、let:
- 使用 let 声明的变量是块作用域(block-scoped)的。
- let 声明的变量只在当前块(花括号内)内部有效。
- 不允许重复声明同名的 let 变量。
- 不存在变量声明提升,即变量只能在声明之后使用。
3、const:
- 使用 const 声明的变量也是块作用域的,与 let 类似。
- const 声明常量,常量的值在声明后不能再被修改。
- 声明时必须进行初始化,否则会导致错误。
- 对于对象和数组等引用类型的常量,虽然不能重新赋值,但对象或数组内部的属性或元素是可以修改的。
4、 不加关键字:
-
在 JavaScript 中,如果没有使用任何关键字(如 var、const 或 let)来声明变量,那么该变量会成为全局变量。
-
不推荐在声明变量时不加关键字,因为这样会污染全局命名空间,并可能导致变量冲突和意外覆盖。
1、睡眠一定的时间
function sleep(ms) {
let start = Date.now()
let end = start + ms
while (true) {
if (Date.now() > end) {
return
}
}
}