【Web APIs】元素可视区 client 系列属性 ② ( 立即执行函数 )

文章目录

  • 一、立即执行函数
    • [1、 立即执行函数简介](#1、 立即执行函数简介)
    • [2、 立即执行函数语法](#2、 立即执行函数语法)
    • [3、 立即执行函数与普通函数对比](#3、 立即执行函数与普通函数对比)
  • 二、代码示例
    • [1、 代码示例 - 普通函数](#1、 代码示例 - 普通函数)
    • [2、 代码示例 - 立即执行函数两种写法](#2、 代码示例 - 立即执行函数两种写法)

一、立即执行函数


1、 立即执行函数简介

立即执行函数 ( Immediately Invoked Function Expression , 简称 IIFE ) 是 定义后 立刻执行 的 JavaScript 函数 , 它的核心特点是 " 定义即执行 " , 且能 创建一个独立的私有作用域 ;

立即执行函数 ( IIFE , Immediately Invoked Function Expression ) 定义完成后 不会等待 手动调用 , 会立刻执行 , 且 内部变量不会泄露到全局 , 不会等到 后面 调用后再执行 ;

立即执行函数 核心价值 是 隔离作用域 , 避免变量污染全局命名空间 ( ES6 前没有块级作用域时 , 这是解决 var 全局污染的关键方案 ) , 也常用于封装模块的私有逻辑 ;

2、 立即执行函数语法

立即执行函数 ( IIFE , Immediately Invoked Function Expression ) 核心是 把 " 函数表达式 " 用括号包裹 ( 让解析器识别为表达式而非声明 ) , 再加上 执行括号 () ;

  • 写法一 : 标准写法 , 函数表达式包裹 + 执行括号 , 推荐使用该方法 ;
javascript 复制代码
// 标准写法:函数表达式包裹 + 执行括号
(function() {
  // 函数体
  console.log("我是立即执行函数 , 马上执行!");
})();
  • 写法二 : 将 完整的 " 函数表达式 + 执行括号 " 写在 () 中 , 比较少用 ;
javascript 复制代码
(function() {
  console.log("我也是立即执行函数!");
}());

3、 立即执行函数与普通函数对比

对比维度 普通函数 立即执行函数 ( IIFE )
执行时机 定义后不会自动执行 , 需手动调用 定义完成后立刻执行 , 无需手动调用
调用方式 函数名 () / 变量名 () 手动触发 定义时自带执行括号 () , 自动触发
作用域暴露 函数名 / 变量名会暴露到全局 / 外层作用域 无任何标识符暴露到全局 , 完全隔离
复用性 可多次调用 , 复用性高 仅执行一次 , 无复用性
命名要求 可命名 / 匿名 ( 匿名需赋值给变量 ) 通常匿名 ( 命名无意义 , 执行后销毁 )
典型用途 通用逻辑、需多次执行的功能 一次性初始化、隔离变量、封装模块

二、代码示例


1、 代码示例 - 普通函数

普通函数 定义后 , function normalFunc() {} , 必须手动调用 normalFunc() 才能执行 , 不调用则无输出 , 调用后才执行 ;

代码示例 :

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>立即执行函数示例</title>
    <script>
        // 定义普通函数
        function normalFunc() {
            console.log("我是普通函数 , 需要手动调用才执行");
        }

        // 不调用则无输出 , 调用后才执行
        normalFunc(); // 手动调用  ->  输出:我是普通函数 , 需要手动调用才执行
    </script>
</head>

<body>
</body>

</html>

执行结果 :

2、 代码示例 - 立即执行函数两种写法

代码示例 :

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>立即执行函数示例</title>
    <script>
        // 写法一 : 
        // 向IIFE传递参数 , 像调用普通函数一样
        (function(name, age) {
            // 输出 : 你好 , 我是 Tom , 今年 18 岁
            console.log(`你好 , 我是 ${name} , 今年 ${age} 岁`);
        })("Tom", 18);


        // 写法二 : 
        // 向IIFE传递参数 , 像调用普通函数一样
        (function(name, age) {
            // 输出 : 你好 , 我是 Jerry , 今年 12 岁
            console.log(`你好 , 我是 ${name} , 今年 ${age} 岁`);
        }("Jerry", 12));
    </script>
</head>

<body>
</body>

</html>

执行结果 :

相关推荐
踩着两条虫1 小时前
VTJ.PRO 核心架构全公开!从设计稿到代码,揭秘AI智能体如何“听懂人话”
前端·vue.js·ai编程
jzlhll1232 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
用头发抵命2 小时前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript
蓝冰凌3 小时前
Vue 3 中 defineExpose 的行为【defineExpose暴露ref变量】详解:自动解包、响应性与实际使用
前端·javascript·vue.js
奔跑的呱呱牛3 小时前
generate-route-vue基于文件系统的 Vue Router 动态路由生成工具
前端·javascript·vue.js
柳杉3 小时前
从动漫水面到赛博飞船:这位开发者的Three.js作品太惊艳了
前端·javascript·数据可视化
Greg_Zhong4 小时前
前端基础知识实践总结,每日更新一点...
前端·前端基础·每日学习归类
We་ct4 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
TON_G-T4 小时前
day.js和 Moment.js
开发语言·javascript·ecmascript