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