详解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日

相关文章

  • js判断登陆用户名及密码是否为空的简单实例

    下面我将为您详细讲解“js判断登陆用户名及密码是否为空的简单实例”的完整攻略。 前置知识 在实现本例中,需要您掌握以下基础知识: HTML基础语法 JavaScript基础语法 表单基本操作 实现步骤 1. 创建表单 首先,我们需要在HTML代码中创建一个表单,用于用户输入用户名和密码: <form id="login-form"&…

    JavaScript 2023年6月10日
    00
  • Javascript Array pop 方法

    JavaScript 中的 pop() 方法用于从数组中删除最后一个元素,并返回该元素的值。在本教程中,我们将详细介绍 pop() 方法的使用方法。 pop() 方法的基本语法如下: array.pop() 其中,array 是要删除元素的数组。 以下两个示例说明: 示例一:使用 pop() 方法删除数组中的最后一个元素 let arr = ["a…

    JavaScript 2023年5月11日
    00
  • js正则表达式中test,exec,match方法的区别说明

    JS正则表达式是一种用于匹配字符串模式的工具,包括test、exec和match等方法可以用于匹配模式并返回匹配结果。这三种方法的用途和返回结果略有不同。我们来详细讲解一下这三种方法的区别说明。 1. test方法 test() 是正则表达式对象的一个方法,用于检测一个字符串是否匹配某个正则表达式。其返回值是一个布尔值,如果匹配成功返回 true,否则返回 …

    JavaScript 2023年6月10日
    00
  • 获取客户端电脑日期时间js代码(jquery)

    获取客户端电脑日期时间的js代码可以通过javascript的内置Date对象或者第三方库jquery来实现。下面我将详细介绍两种获取客户端电脑日期时间的js代码。 使用Date对象获取电脑日期时间 javascript内置Date对象提供了获取电脑日期时间的方法。可以通过以下代码实现: var now = new Date(); var year = no…

    JavaScript 2023年5月27日
    00
  • 使用JS+XML(数据岛)实现分页)

    那么下面就是详细讲解“使用JS+XML(数据岛)实现分页”的完整攻略: 什么是数据岛? 数据岛是一种传输XML数据的技术。通过XML数据岛技术,我们可以将XML数据作为HTML文档的一部分传输到客户端。XML数据岛把XML数据存储在一个特定的DIV元素中,在浏览器页面上隐藏该元素即可,通过JavaScript的DOM操作,即可取得数据,从而实现数据分页的需求…

    JavaScript 2023年6月10日
    00
  • JS获取url参数,JS发送json格式的POST请求方法

    JS获取url参数: 在JavaScript中获取url参数可以使用location对象的search属性或URLSearchParams API。 使用search属性: // 获取url参数 const urlParams = new URLSearchParams(window.location.search); // 获取具体参数 const id …

    JavaScript 2023年5月27日
    00
  • JavaScript编码风格指南(中文版)

    JavaScript编码风格指南(中文版)攻略 一、什么是编码风格指南? 编码风格指南是一份约定俗成的规范,用于统一团队内的代码编写风格,包括缩进、空格、命名规则等方面。编码风格指南的好处是可以让代码更加统一、易读、易维护,提高代码质量和开发效率。 二、为什么要使用编码风格指南? 统一团队内部的代码风格,减少开发者之间因个人习惯造成的差异,方便团队合作和代码…

    JavaScript 2023年6月10日
    00
  • js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍

    JS中页面的重新加载 在JS中,我们经常需要在不刷新整个页面的情况下重新加载部分内容,下面将介绍如何在JS中实现当前页面和上级页面的重新加载。 当前页面的重新加载 要实现当前页面的重新加载,可以使用如下代码: location.reload(); 这样,当前页面的内容就会被重新加载,相当于用户点击了浏览器的刷新按钮。 上级页面的重新加载 要实现上级页面的重新…

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