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日

相关文章

  • 表单提交验证类

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

    JavaScript 2023年6月10日
    00
  • js前端传json后台接收‘‘被转为quot的问题解决

    当前端使用 JavaScript 将 JSON 对象发送到后台时,有时可能会遇到 JSON 字符串中的双引号被转换为 " 实体的问题,这可能会导致后端无法正确解析 JSON 字符串的情况。下面是解决这个问题的攻略: 1. 从前端开始 首先,确保前端代码正确地生成了 JSON 字符串,不应该使用任何 HTML 实体序列化。例如,以下代码可能会…

    JavaScript 2023年5月27日
    00
  • javascript中的return和闭包函数浅析

    关于“javascript中的return和闭包函数浅析”的完整攻略,可以分为以下几个部分。 1. return语句的基本概念和用法 在JavaScript中,return语句用于从函数中返回一个值,并且结束函数的执行。return语句可以出现在函数的任何位置,一旦执行到return语句,函数就会立刻结束并返回指定的值。return语句的语法如下: retu…

    JavaScript 2023年6月10日
    00
  • C#基于正则表达式实现获取网页中所有信息的网页抓取类实例

    C#基于正则表达式实现获取网页中所有信息的网页抓取类实例 1. 前言 网页抓取是实现自动化数据采集、分析和处理的重要手段之一。本篇文章将介绍使用C#基于正则表达式实现获取网页中所有信息的网页抓取类实例。 2. 实现过程 2.1 步骤一:获取网页内容 使用C#自带的HttpClient类可以很方便地获取网页的原始内容。首先,我们需要先定义一个GetHtml方法…

    JavaScript 2023年6月10日
    00
  • JavaScript基础知识之方法汇总结

    JavaScript基础知识之方法汇总 本文旨在总结 JavaScript 中常用的方法,包含了数据类型转换、运算符、条件语句、循环语句、函数等多个方面的内容,适用于初学者以及复习巩固。下面按照不同的分类分别介绍。 数据类型转换 JavaScript 中不同数据类型之间会发生类型转换,常见的有以下几种: 字符串转数字:使用 Number() 或 parseI…

    JavaScript 2023年5月17日
    00
  • JavaScript中关于数组的调用方式

    JavaScript中的数组是一组值的有序集合,可以通过数字索引来访问这些值。在JavaScript中,数组可以通过几种不同的方式来创建和访问。 创建数组 JavaScript中的数组可以通过以下两种方式来创建: 直接使用方括号[]来创建一个空数组,如下所示: const arr1 = []; 使用方括号[]并在其中包含数组元素,如下所示: const ar…

    JavaScript 2023年5月27日
    00
  • 前端设计模式——MVVM模式

    MVVM模式(Model-View-ViewModel):它的目标是将用户界面(UI)的逻辑与业务逻辑分离。该模式的核心思想是将UI分为视图(View)和视图模型(ViewModel),并通过数据绑定实现二者之间的通信。 在MVVM模式中,视图(View)表示用户界面的呈现部分,视图模型(ViewModel)则是UI逻辑的抽象,将UI状态和行为从视图中抽离出…

    JavaScript 2023年4月18日
    00
  • 在ASP.NET MVC项目中使用RequireJS库的用法示例

    下面是在 ASP.NET MVC 项目中使用 RequireJS 库的使用示例: 简介 RequireJS 是一个 JavaScript 模块加载器,它可以让开发者更加轻松地管理和加载 JavaScript 模块。在大型项目中,使用 RequireJS 可以让代码结构更加清晰,便于维护和扩展。 在 ASP.NET MVC 项目中,可以使用 RequireJS…

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