详解JS中的立即执行函数

详解JS中的立即执行函数

在JS中,立即执行函数(Immediately Invoked Function Expression,IIFE)是一种常见的函数调用方式。IIFE有许多不同的应用场景,例如定义模块、创建私有作用域等。本文将详细讲解IIFE的语法和使用场景,并提供两个示例说明。

语法

IIFE的基本语法如下:

(function () {
  // 这里是代码块
})();

在上面的代码中,IIFE定义了一个匿名函数,并立即将其执行。由于函数是匿名的,它无法被外部访问。这样可以确保函数内部的变量和函数不会污染全局作用域。

使用场景

模块定义

IIFE可以用来定义模块,将模块的代码封装在私有作用域中。这样,模块内部的变量和函数将不会与全局变量发生命名冲突。例如:

var module = (function () {
  var privateVar = '这是私有变量';

  function privateFunc() {
    console.log('这是私有函数');
  }

  return {
    publicFunc: function () {
      console.log('这是公有函数');
    },
    publicVar: '这是公有变量',
  };
})();

module.publicFunc(); // 这是公有函数
console.log(module.publicVar); // 这是公有变量
console.log(module.privateVar); // undefined
module.privateFunc(); // TypeError: module.privateFunc is not a function

在上面的例子中,IIFE定义了一个module对象,该对象具有公有变量、公有函数和私有变量、私有函数。因为私有变量和函数只在IIFE内部可访问,所以对外部来说是不可见的。

避免变量声明提升

JS中存在变量声明提升的问题,即变量声明会被提升到作用域的顶部。使用IIFE可以避免这个问题,可以将变量的声明和初始化封装在函数内部。例如:

(function () {
  var name = '小明';

  function sayHi() {
    console.log('大家好,我是' + name);
  }

  sayHi();
})();

在上面的例子中,变量name和函数sayHi都在IIFE内部定义。因为它们是函数内部的局部变量和函数,所以它们不会被声明提升到全局作用域。

示例说明

示例一:打印1-10的数字

在这个示例中,我们将使用IIFE打印数字1-10。我们可以将计数器变量封装在IIFE的内部,以便于对全局作用域中的变量进行封装。

(function () {
  for (var i = 1; i <= 10; i++) {
    (function (j) {
      setTimeout(function () {
        console.log(j);
      }, j * 1000);
    })(i);
  }
})();

在上面的代码中,我们使用了两个嵌套的函数,一个是外部的循环,另一个是立即执行函数。在循环中,我们通过将计数器变量的值传递给立即执行函数的形参来封装变量。然后,我们使用setTimeout函数在每个数字之间添加一秒延迟,并打印每个数字。

示例二:避免变量声明提升

在这个示例中,我们将使用IIFE避免函数内部变量的声明提升。

(function () {
  var name = '小明';

  function sayHi() {
    console.log('大家好,我是' + name);
  }

  sayHi();
})();

在上面的代码中,我们将变量name和函数sayHi封装在IIFE中,这样它们就只能在IIFE函数内部访问。由于它们是私有的,并且在IIFE中声明和初始化,因此它们不会被提升到全局作用域中。这样,我们就可以避免变量声明提升的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JS中的立即执行函数 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JavaScript检测是否开启了控制台(F12调试工具)

    要检测浏览器是否开启了控制台(F12调试工具),可以通过以下步骤实现: 首先,我们可以使用 window.console 属性检查控制台是否可用。如果控制台可用,则 window.console 属性会被定义,并且其类型为对象。因此我们可以使用以下 JavaScript 代码检查控制台是否可用: if (window.console && w…

    JavaScript 2023年6月11日
    00
  • JavaScript 七大技巧(一)

    JavaScript 七大技巧(一)攻略 JavaScript 是一门强大而灵活的编程语言,在编写高质量的代码时,使用一些技巧可以提高代码的可读性、可维护性和性能。下面是 JavaScript 中的七大技巧,本篇攻略将详细讲解其中的一些。 1. 使用严格模式 使用严格模式可以在编码时抛出更多的错误,这有助于提高代码的质量和可读性。而且,使用严格模式能够避免一…

    JavaScript 2023年5月17日
    00
  • 推荐一个javascript的加密工具

    当我们需要在前端对一些敏感信息进行加密时,常常会使用JavaScript的加密工具。这里推荐两个常用的JavaScript加密工具。 1. CryptoJS CryptoJS是一个JavaScript加密器,它提供了多种加密算法,如AES、DES、Rabbit、MD5、SHA、HMAC等等。下面我们以AES加密为例,讲解使用CryptoJS进行加密的步骤。 …

    JavaScript 2023年5月19日
    00
  • 浅谈js数组和splice的用法

    浅谈js数组和splice的用法 在JavaScript中,数组是一种非常常见的数据类型。而splice()方法则是JavaScript数组提供的一种很有用的方法,用来对数组进行删除、添加、替换等操作。本文将会为你详细讲解js数组和splice的用法,深入了解数组和splice的使用可以使你的JavaScript编程达到更高的层次。 数组 数组是一种非常重要…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计(第3版)学习笔记8 js函数(中)

    JavaScript高级程序设计(第3版)学习笔记8 js函数(中)主要围绕函数作用域、闭包、函数式编程和函数对象四大主题展开,下面分别做详细说明: 函数作用域 JavaScript中的函数作用域是通过函数定义时的位置来决定的,即内部函数可以访问外部函数中的变量和函数,而外部函数无法访问内部函数中的变量。通过这种作用域链的形式来维护作用域,每个函数被创建时都…

    JavaScript 2023年5月27日
    00
  • javascript巧用eval函数组装表单输入项为json对象的方法

    下面是详细讲解“javascript巧用eval函数组装表单输入项为json对象的方法”的完整攻略。 简介 在 Web 开发中,我们常常需要将用户在表单中输入的数据组装成 JSON 格式发送给后台进行处理。在传统的方法中,我们需要对每个表单元素逐一获取 value 值并组装成一个 JSON 对象,这种方式虽然可行,但显然效率较低。本文介绍一种巧用 eval …

    JavaScript 2023年5月27日
    00
  • js实现json数组分组合并操作示例

    下面我就给您详细讲解一下“js实现json数组分组合并操作示例”的完整攻略。 1. 了解需求 首先我们需要明确需求,在这个示例中,我们要实现对一个JSON数组的分组和合并操作。具体来说,就是从一个JSON数组中找出所有的相同属性值的元素,并将其合并成一个元素。 2. 分组操作 接下来,我们需要实现分组操作。在JavaScript中,可以使用reduce()方…

    JavaScript 2023年5月27日
    00
  • js中的触发事件对象event.srcElement与event.target详解

    题目:js中的触发事件对象event.srcElement与event.target详解 什么是事件对象 在JavaScript中,事件对象是在事件触发时由浏览器自动创建的一个对象,它包含着当前事件的属性、方法和一些有用的信息。我们可以通过这个对象来获取有关事件的信息。 事件对象属性 在JavaScript中,事件对象包含有一些有用的属性,如下: type:…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部