在JavaScript中,var,let和const都是用于声明变量的关键字。但是他们在作用域,变量提升hoisting,以及是否允许重新赋值和重新声明方向有很多的不同。
作用域
作用域的英文全称是Scope,当用var声明的变量具有函数作用域,即在整个包含函数内部都可见。如果在函数外部使用var声明变量,该变量具有全局作用域。那么let和const:这两个声明的变量具有块级作用域block scope,即只在包含它们的代码块由花括号{}界定内部可见。
提升
提升的英文是Hoisting:,var变量提升发生在var声明的变量上,这意味着无论在函数的那个位置声明变量,变量都会被视为在函数顶部声明但不初始化,如果是提前使用,则赋值为undefined。
let和const:虽然技术上也会提升,但他们被限制在一个称为暂时性死区英文“Temploral Dead Zone,TDZ”的区域,直到实际的代码被执行并且变量被声明,在声明之前访问这些变量会导致ReferenceError。
重新赋值
var和let:使用这两个关键字声明的变量可以在后续被重新赋值。
const:声明的变量必须在声明初期时初始化,并且一旦赋值后不能被重新赋值,尝试改变const变量的值会导致运行时错误。
重新声明
var:在相同的作用域内可以多次声明同一个变量。后面的声明会覆盖前面的声明。
let和const:在相同的作用域或块级作用域内不允许重新声明已经存在的变量,尝试这样做将会导致语法错误。
感谢观看
文章不错支持一下,非常喜欢
文章不错非常喜欢,支持一下
友链已经添加好了,欢迎回访哈
文章不错支持一下,非常喜欢
文章不错非常喜欢,支持一下
文章不错支持一下,非常喜欢
文章不错非常喜欢,支持一下
马克吐温的作品就很经典,小时候很爱看
文章不错支持一下,非常喜欢
文章不错非常喜欢,支持