深入理解 JavaScript 的基础知识对于掌握 Node.js 至关重要。以下是对 JavaScript 关键概念的详细解释:
var
、let
、const
:
var
:在 ES6 之前,JavaScript 中只有 var
用于声明变量。var
有函数作用域,而不是块级作用域,这可能导致变量提升问题。let
:在 ES6 引入,具有块级作用域,变量只能在声明的块内访问,避免了 var
的提升问题。const
:同样具有块级作用域,但声明的变量是常量,不能重新赋值。示例:
function example() {
var x = 10;
if (true) {
var x = 20; // 重新声明,覆盖外部变量
console.log(x); // 20
}
console.log(x); // 20
}
function example2() {
let y = 10;
if (true) {
let y = 20; // 块级作用域,只在这个块内有效
console.log(y); // 20
}
console.log(y); // 10
}
const z = 30;
z = 40; // TypeError: Assignment to constant variable.
var
声明的变量具有函数作用域,意味着它只能在声明它的函数内部访问。let
和 const
声明的变量具有块级作用域,只能在声明的块内访问。示例:
var globalVar = "I'm global";
function scopeExample() {
var functionVar = "I'm inside a function";
if (true) {
let blockVar = "I'm inside a block";
console.log(blockVar); // "I'm inside a block"
}
// console.log(blockVar); // ReferenceError: blockVar is not defined
}
console.log(globalVar); // "I'm global"
// console.log(functionVar); // ReferenceError: functionVar is not defined
示例:
function outer() {
let count = 0;
return function inner() {
count++;
console.log(count);
};
}
const increment = outer();
increment(); // 1
increment(); // 2
async
声明一个函数为异步函数,await
用于等待 Promise 的结果。示例:
// 回调
function fetchData(callback) {
setTimeout(() => {
callback("Data received");
}, 1000);
}
fetchData((data) => {
console.log(data);
});
// Promise
function fetchDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data received");
}, 1000);
});
}
fetchDataPromise().then(data => {
console.log(data);
});
// async/await
async function fetchDataAsync() {
const data = await fetchDataPromise();
console.log(data);
}
fetchDataAsync();
constructor
创建类的实例并初始化属性。extends
关键字实现类的继承,并可用 super
调用父类的方法。示例:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类的构造函数
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog("Rex", "Labrador");
dog.speak(); // "Rex barks."
深入理解这些 JavaScript 基础概念对于构建复杂的应用程序至关重要,特别是在 Node.js 环境下开发时。随着对这些概念的掌握,你将能够更轻松地应对异步编程、模块化设计和面向对象编程等挑战。