js中匿名函数的N种写法

接下来我将为您详细讲解 “js中匿名函数的N种写法” 的攻略。该攻略将介绍匿名函数的基本写法、立即执行函数、闭包、箭头函数、生成器函数和ES6中的模板字符串等多种写法,下面进行详细说明。

基本写法

匿名函数最基本最常见的写法如下:

(function(){
    //代码块
})();

这其实是一个立即执行函数的写法,将一个匿名函数用小括号括起来,并在最后加上一个小括号来立即执行该函数。这种写法常用来实现一些初始化的操作。

立即执行函数

除了基本写法,立即执行函数常用的写法还有如下几种:

方式一

!function () {
    //代码块
}();

这种写法利用 !、+、-、~、void等运算符来将函数转换成表达式,从而实现立即执行。

方式二

(function f() {
    //代码块
})()

这种写法将匿名函数赋值给一个变量f,这个变量只能在函数内部使用,除了这一点之外,和基本写法是一样的。

方式三

(function () {
    //代码块
}).call(this);

这种写法利用了call方法来改变函数内部 this 的指向,让它指向全局对象。

闭包

闭包是指函数访问了它所在的函数的作用域。闭包有很多应用场景,例如在函数中定义私有变量和方法、模拟块级作用域等。

function counter() {
    var n = 0;
    return {
        count: function() { return ++n; },
        reset: function() { n = 0; }
    };
}
var c = counter();
console.log(c.count()); //1
console.log(c.count()); //2
console.log(c.reset());
console.log(c.count()); //1

这段代码使用了闭包来实现一个计数器,记录了函数调用的次数。

箭头函数

箭头函数是ES6中新加入的函数表达式,它的特点是内部没有this、arguments和super指针,能够自动继承外部函数的this。箭头函数不需要function关键字和return关键字,具体用法如下:

//单个参数时,可以省略小括号
var f1 = x => x * x;

//多个参数时,使用小括号括起来
var f2 = (x, y) => x + y;

//多行代码块时,使用大括号括起来
var f3 = (x, y) => {
    x++;
    y--;
    return x + y;
};

生成器函数

生成器函数是ES6中新加入的语法,可以使用 yield关键字来实现暂停函数执行和恢复函数执行,以及生成一个遍历器对象。生成器函数有点类似于协程,它可以让函数自身来控制执行的顺序,非常灵活。具体用法如下:

function* helloWorldGenerator() {
    yield 'hello';
    yield 'world';
    return 'ending';
}
var hw = helloWorldGenerator();
console.log(hw.next()); //Object{value: "hello", done: false}
console.log(hw.next()); //Object{value: "world", done: false}
console.log(hw.next()); //Object{value: "ending", done: true}
console.log(hw.next()); //Object{value: undefined, done: true}

这段代码实现了一个简单的生成器函数,每次调用 next() 方法,函数会暂停执行,并返回一个遍历器对象。遍历器对象有两个属性,分别是 value 和 done,value 表示当前状态的返回值,done 表示函数是否执行完毕。

ES6中的模板字符串

ES6中新引入的模板字符串可以将字符串与表达式混合在一起,方便实现字符串的拼接和格式化输出。其中关于模板字符串中${}的表达式可以为任意类型,可以是一个函数,也可以是一段任意的 JS 代码。具体用法如下:

var name = 'Tom';
var age = 18;
console.log(`My name is ${name}, and I'm ${age} years old.`);

这段代码使用了模板字符串来输出字符串与变量的拼接。在反引号 `` 中,通过 ${} 来引入变量或者表达式,并且可以任意换行,非常方便。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中匿名函数的N种写法 - Python技术站

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

相关文章

  • 基于微信小程序实现人脸数量检测的开发步骤

    下面是详细讲解基于微信小程序实现人脸数量检测的开发步骤的完整攻略。 1. 确定需求和目标 首先需要明确开发的目标,即实现人脸数量检测功能的微信小程序。同时需要明确项目的需求和功能,这里我们需要实现对用户上传的照片进行人脸数量检测,并显示检测结果。为此,我们需要调用微信小程序的API和引入相关的开发工具。 2. 引入开发工具和API 微信小程序提供了一系列AP…

    JavaScript 2023年5月19日
    00
  • 将字符串中由空格隔开的每个单词首字母大写

    要将字符串中由空格隔开的每个单词首字母大写,可以使用字符串操作方法和正则表达式。 步骤如下: 首先要将字符串进行拆分,将每个单词分离。可以使用split()方法,该方法可以按照指定字符或正则表达式对字符串进行分割,返回一个由分割出来的子字符串组成的数组。 例如: let str = "hello world"; let arr = str…

    JavaScript 2023年6月11日
    00
  • JavaScript插件化开发教程 (二)

    下面是“JavaScript插件化开发教程 (二)”的完整攻略。 什么是插件 插件是一种可扩展的软件,可以嵌入到其他应用程序中,增加新的功能。在前端开发中,插件就是可以在网站或者应用程序中被嵌入的 JavaScript 库。 插件的优点 使用插件可以很大程度上提升代码重用和开发效率。当我们需要实现某个功能时,只需引入对应的插件即可,无需从头开始编写代码。而且…

    JavaScript 2023年5月18日
    00
  • JS实现的颜色实时渐变效果完整实例

    是关于JS实现的颜色实时渐变效果的攻略,这里详细讲解一下: 准备工作 首先,我们需要打开一份HTML代码,并在其中插入一个div元素,用于展示渐变颜色,在这个div中设置颜色为淡绿色(例如:background-color: #9ccc65)。 同时,我们还需要在HTML页面中引入一份JS代码,以便后续实现实时渐变效果。 实现步骤 首先,我们需要编写一个颜色…

    JavaScript 2023年6月11日
    00
  • JavaScript Split()方法

    JavaScript的split()方法用于将字符串分割成字符串数组,返回数组。它可以按照指定的分割符来分割字符串。以下是详细讲解split()方法的攻略: 语法 string.split(separator, limit) 参数:- separator(必须):用于指定分割符的字符串或正则表达式。- limit(可选):一个整数,限定分割后的数组长度。 基…

    JavaScript 2023年5月18日
    00
  • 表单提交验证类

    下面是关于表单提交验证类的完整攻略。 什么是表单提交验证类 表单提交验证类是一种PHP后端验证机制,用于验证用户通过表单提交的数据是否符合预期的格式和规范。通过对表单提交的数据进行验证,可以有效地防止恶意提交和错误数据的输入。 表单提交验证类的工作原理 表单提交验证类的工作原理包括以下几步: 接收表单提交的数据。 定义验证规则。包括验证规则名称、验证规则类型…

    JavaScript 2023年6月10日
    00
  • Javascript中内建函数reduce的应用详解

    Javascript中内建函数reduce的应用详解 简介 reduce是JavaScript中的一个内建函数,主要用于对数组中的元素进行累加计算。在使用reduce之前,需要先理解一些概念。 reduce()方法:reduce() 方法接收两个参数: 一个回调函数,也称为累加器函数(accumulator)。它将原数组中的每个元素和累加器参数进行运算,并返…

    JavaScript 2023年5月27日
    00
  • JS异步堆栈追踪之为什么await胜过Promise

    JS异步堆栈追踪是一项非常重要的技能,它能够帮助我们深入理解JavaScript异步编程模型。在这篇攻略中,我将详细讲解为什么await胜过Promise,并提供两个示例来帮助解释这个问题。 为什么await胜过Promise 在讲解为什么await胜过Promise之前,我们需要先探讨Promise的一些限制。Promise是一种典型的异步编程模型,它可以…

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