Skip to main content

ECMAScript 变量

在 ECMAScript 中,变量是存储数据的容器。在使用变量之前,我们需要先声明它们。

在 ECMAScript 中,有3个关键字用于声明变量

var a = 1;
let b = 2;
const c = 3;

它们3个有什么区别呢?关于它们的区别

  • var:是函数作用域的,允许重复声明,存在变量提升,且变量可以在声明之前使用(只是值为 undefined),存在映射机制
  • let(ES6):是块级作用域的,不允许重复声明,不能在声明之前使用(会导致暂时性死区)
  • const(ES6):在let的基础上优化,声明后的值不能被修改,但是对于引用类型,其内部属性是可以修改的

关于区别的解释

  • 函数作用域:在函数内部声明的变量,它的作用范围只限于这个函数内部,在函数外部无法访问
  • 变量提升:只发生在当前作用域,在函数中声明会自动提升到函数作用域顶部,在全局中声明会自动提升到全局作用域顶部(函数优先提升)
  • 映射机制:在全局作用域中,声明的变量会自动挂载到全局 window 对象上,变量的值发生变化,全局 window 对象的值也会变化
  • 允许重复声明:对于重复的声明,后面的声明会覆盖前面的声明
  • 块级作用域:代码中{}创建的代码块(例如:条件语句、循环语句等),其中声明的变量仅在该代码块内部可见,超出该代码块的范围就无法访问这些变量

ECMAScript 是区分大小写的,这意味着它的变量必须始终保持一致的大小写形式。

const messgae = 'Hello World';
console.log(message); // Uncaught ReferenceError: Message is not defined

ECMAScript 的变量必须以字母、下划线_、美元符号$开头,后续字符可以是字母、数字、下划线或美元符号。

const message = 'Hello World'; // 正确
const _message = 'Hello World'; // 正确
const $message = 'Hello World'; // 正确
const message123 = 'Hello World'; // 正确
const 123message = 'Hello World'; // Uncaught SyntaxError: Invalid or unexpected token