举例说明js立即执行函数的写法有哪些?
JS立即执行函数表达式 (IIFE - Immediately Invoked Function Expression) 有几种常见的写法,它们的核心思想都是创建一个函数表达式,然后立即执行它。以下是几种写法及示例:
1. 使用圆括号包裹函数表达式:
这是最常见的一种写法,用一对圆括号 ()
包裹函数表达式,然后在末尾添加另一对圆括号 ()
来立即执行它。
(function() {
console.log("Hello from IIFE!");
})();
2. 使用一元运算符:
可以使用一元运算符,例如 !
、+
、-
、~
等,将函数表达式转换为表达式,然后立即执行。
!function() {
console.log("Hello from IIFE!");
}();
+function() {
console.log("Hello from IIFE!");
}();
-function() {
console.log("Hello from IIFE!");
}();
~function() {
console.log("Hello from IIFE!");
}();
3. 使用void
运算符:
void
运算符会计算表达式并返回 undefined
。
void function() {
console.log("Hello from IIFE!");
}();
带参数的IIFE:
所有上述写法都可以传递参数给IIFE:
(function(name) {
console.log("Hello, " + name + "!");
})("World"); // 输出: Hello, World!
!function(a, b) {
console.log(a + b);
}(1, 2); // 输出: 3
ES6中的箭头函数:
虽然箭头函数本身不能直接作为IIFE使用,但是可以将其用圆括号包裹起来实现同样的效果:
(() => {
console.log("Hello from IIFE using arrow function!");
})();
void (() => {
console.log("Another IIFE with arrow function");
})();
选择哪种写法?
虽然以上几种写法都能实现相同的功能,但最常见和推荐的写法是使用圆括号 ()
包裹函数表达式。这种写法清晰易懂,并且被广泛接受为IIFE的标准写法。 使用一元运算符的写法较为简洁,但可读性略逊一筹。
IIFE 的作用:
- 创建私有作用域: IIFE 最主要的作用是创建私有作用域,避免变量污染全局命名空间。在IIFE内部定义的变量和函数不会泄漏到全局作用域。
- 避免命名冲突: 在多人协作开发时,使用IIFE可以有效避免命名冲突。
- 创建模块: IIFE 可以用来创建模块化的代码,将相关的代码封装在一个独立的单元中。
希望这些例子能帮助你理解JS立即执行函数的各种写法。