JavaScript--立即调用函数表达式(IIFE)和现代语法糖
·
IIFE(Immediately Invoked Function Expression)是定义后立即执行的 JavaScript 函数。
// 方式1:括号包裹函数
(function() {
console.log('立即执行!');
})();
// 方式2:括号包裹整个表达式
(function() {
console.log('立即执行!');
}());
// 方式3:使用其他运算符
!function() {
console.log('立即执行!');
}();
+function() {
console.log('立即执行!');
}();
目的:
1. 创建私有作用域(最主要的原因)
问题: JavaScript 只有函数作用域,没有块级作用域(ES6之前)
// 没有 IIFE 的情况
var count = 0;
function increment() {
count++;
console.log(count);
}
increment(); // 1
increment(); // 2
// count 是全局变量,容易被修改
// 使用 IIFE 创建私有作用域
(function() {
var privateCount = 0; // 私有变量
window.increment = function() {
privateCount++;
console.log(privateCount);
};
})();
increment(); // 1
increment(); // 2
console.log(typeof privateCount); // undefined - 无法访问
ES6 的现代替代方案
1. 块级作用域(主要替代)
-
let/const块级作用域,不使用var
// 使用 {} 创建块级作用域
{
const privateVar = '私有变量';
let counter = 0;
console.log(privateVar); // 私有变量
}
// console.log(privateVar); // 报错: privateVar is not defined
// console.log(counter); // 报错: counter is not defined
2. 类私有字段(ES2022+)
class Counter {
#count = 0; // 私有字段
increment() {
this.#count++;
}
getCount() {
return this.#count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 1
// console.log(counter.#count); // 语法错误
更多推荐


所有评论(0)