本文梳理了 JavaScript 中标识符声明方式的演变历程。从 ES5 时代的 var 和 function,到 ES6 引入的 let、const 以及 class 关键字,详细解析了各关键字在变量声明、函数定义及类创建中的具体应用与区别,重点阐述了块级作用域与变量提升机制的变化。
ES5 时代的标识符声明
一、ES5 时代
在 ES5 阶段,JavaScript 主要依赖 var 和 function 关键字来生成标识符。与其他强类型语言(如 Java、Ruby)不同,JS 仅使用 var 来声明变量,无论数据类型如何均统一使用此关键字。需要注意的是,弱类型并不等同于无类型,JS 的类型会在运行时根据运算符执行隐式转换。相比之下,Java 等语言拥有 int、float、double、long 等多种数字声明关键字。
// JS
var num1 = 10; // 整数
var num2 = 10.1; // 浮点数
var str = 'John'; // 字符串
var boo = false; // 布尔
var obj = {}; // 对象
// Java
int num1 = 10;
double num2 = 10.2;
String str = "John";
Boolean boo = false;
除了 var,function 关键字也是 ES5 中生成标识符的重要手段。通过 function 声明的标识符通常对应函数、方法或构造器(即类)的定义。
// functions
function fetchData(url, param) {
// ...
}
// methods
var obj = {
getUrl: function() {
}
};
// class
function Person(name, age) {}
Person.prototype = {
}
ES6 时代的标识符扩展
二、ES6 时代
var function let const class 可以看到,ES6 增加了3个可以产生标识符的关键字 let/const/class。let/const 用来声明变量,class 用来定义类。
// 定义普通变量
let name = 'John';
for (let i = 0; i < arr.length; i++) {
}
if (boo) {
let obj = {};
...
}
// 定义常量
const PI = 3.1415926;
const $el = $('.nav');
// 定义类
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '('+this.x+', '+this.y+')';
}
}
在 ES6 的代码风格中,提倡“少 var 多 let”。let 和 const 均具备块级作用域特性,且不会发生变量提升现象。同时,类的定义统一使用 class 关键字,这在一定程度上分担了 function 的部分职责,使代码结构更为清晰。
以上即为 JavaScript 标识符声明方式演变的完整内容,希望对大家的学习有所帮助。