【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>

执行结果 :

相关推荐
weixin_408099673 分钟前
【完整教程】天诺脚本如何调用 OCR 文字识别 API?自动识别屏幕文字实战(附代码)
前端·人工智能·后端·ocr·api·天诺脚本·自动识别文字脚本
吴声子夜歌4 分钟前
ES6——Generator函数详解
前端·javascript·es6
吴声子夜歌5 分钟前
ES6——Set和Map详解
前端·javascript·es6
码喽7号35 分钟前
vue学习四:Axios网络请求
前端·vue.js·学习
xinzheng新政1 小时前
Javascript 深入学习基础·4
javascript·学习·servlet
粥里有勺糖1 小时前
视野修炼-技术周刊第129期 | 上一次古法编程是什么时候
前端·javascript·github
whuhewei1 小时前
JS获取CSS动画的旋转角度
前端·javascript·css
蓝黑20201 小时前
Vue组件通信之v-model
前端·javascript·vue
像素之间2 小时前
为什么运行时要加set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve
前端·javascript·vue.js
M ? A2 小时前
Vue转React实战:defineProps精准迁移实战
前端·javascript·vue.js·经验分享·react.js·开源·vureact