JavaScript立即调用函数

80 阅读2分钟

JavaScript立即调用函数

立即调用函数表达式(Immediately Invoked Function Expression, IIFE) 是 JavaScript 中一种定义并立即执行函数的语法。IIFE 通常用于创建一个独立的作用域,避免变量污染全局命名空间。

1. IIFE 的基本语法

(1) 语法结构

  • 将函数定义包裹在括号中,然后立即调用。
  • 语法:(function() { ... })();

示例

(function() {
  console.log('IIFE executed');
})();
// 输出:IIFE executed

(2) 带参数的 IIFE

  • 可以向 IIFE 传递参数。

示例

(function(name) {
  console.log(`Hello, ${name}`);
})('John');
// 输出:Hello, John

2. IIFE 的作用

(1) 创建独立作用域

  • IIFE 可以创建一个独立的作用域,避免变量污染全局命名空间。

示例

(function() {
  const localVar = '局部变量';
  console.log(localVar); // 输出:局部变量
})();
console.log(localVar); // 报错:ReferenceError: localVar is not defined

(2) 避免变量冲突

  • 在模块化开发中,IIFE 可以避免不同模块之间的变量冲突。

示例

// 模块 1
(function() {
  const name = 'Module 1';
  console.log(name);
})();

// 模块 2
(function() {
  const name = 'Module 2';
  console.log(name);
})();

(3) 初始化代码

  • IIFE 可以用于初始化代码,确保代码在定义后立即执行。

示例

(function() {
  const config = {
    apiUrl: 'https://api.example.com',
    timeout: 5000
  };
  console.log('Initialized with config:', config);
})();

3. IIFE 的变体

(1) 箭头函数 IIFE

  • 使用箭头函数定义 IIFE。

示例

(() => {
  console.log('Arrow function IIFE');
})();

(2) 返回值

  • IIFE 可以返回一个值,赋值给变量。

示例

const result = (function() {
  return 'IIFE result';
})();
console.log(result); // 输出:IIFE result

4. IIFE 的现代替代方案

(1) 块级作用域

  • 使用 letconst 创建块级作用域,替代 IIFE。

示例

{
  const localVar = '局部变量';
  console.log(localVar); // 输出:局部变量
}
console.log(localVar); // 报错:ReferenceError: localVar is not defined

(2) 模块化

  • 使用 ES6 模块(import/export)替代 IIFE。

示例

// module.js
const name = 'Module';
export default name;

// main.js
import name from './module.js';
console.log(name); // 输出:Module

总结

特性描述示例
语法(function() { ... })();(function() { console.log('IIFE'); })();
作用创建独立作用域,避免变量污染(function() { const x = 10; })();
变体箭头函数 IIFE、返回值(() => console.log('IIFE'))();
替代方案块级作用域、ES6 模块{ const x = 10; }

IIFE 是 JavaScript 中一种常用的模式,适用于创建独立作用域和初始化代码。在现代开发中,可以使用块级作用域或模块化替代 IIFE。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github