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日

相关文章

  • JavaScript html5利用FileReader实现上传功能

    这里提供一个简单的JavaScript HTML5利用FileReader实现上传文件的攻略。 前言 很多时候我们需要上传文件到服务器。HTML5中提供了<input type=”file”>标签来实现文件上传。但是这种方法有一个限制:无法对文件进行预览或处理。为了解决这个问题,我们可以使用FileReader API。FileReader AP…

    JavaScript 2023年5月27日
    00
  • js 调用本地exe的例子(支持IE内核的浏览器)

    下面将详细讲解“JS 调用本地 EXE 的例子(支持 IE 内核的浏览器)”的完整攻略,并提供两条示例。 准备工作 在进行本地 EXE 执行前,需要进行以下准备工作: 在服务器上放置本地 EXE 程序。 使用本地服务器,将前端代码放置于本地服务器上,这样才能执行本地 EXE 程序。 使用 IE 内核的浏览器,否则无法执行本地 EXE 程序。 JS 调用本地 …

    JavaScript 2023年5月27日
    00
  • JavaScript注释

    JavaScript注释是指在JavaScript代码中添加的文本,旨在对代码进行解释并提高代码的可读性。通常情况下,当写代码时需要将一些重要信息记录下来,供自己或其他开发者参考。JavaScript注释是实现这一目标的一种简单而有效的方式。 JavaScript注释有两种,多行注释和单行注释。通常情况下,多行注释用于对整段代码进行解释,单行注释用于对单行代…

    Web开发基础 2023年3月30日
    00
  • JavaScript实现世界各地时间显示

    当使用 JavaScript 实现世界各地时间显示时,我们可以利用 Date 对象和其方法,将获取的世界各地时区与本地时间进行计算再进行显示。 以下是实现该功能的完整攻略: 步骤一:获取本地时间 在 JavaScript 中,我们可以通过创建 Date 实例来获取当前本地时间。下面是一个获取本地时间的实例: const localTime = new Dat…

    JavaScript 2023年5月27日
    00
  • 详解JS函数stack size计算方法

    详解JS函数stack size计算方法 栈大小及其作用 在JS中,每当函数调用时,就会创建一个称为“栈帧”的数据结构,用于存储调用状态和参数等信息。栈帧是一种后进先出的数据结构,用于保存函数调用链的关系。栈帧的大小取决于函数中使用的变量数量和它们的类型。 当一个函数被调用时,它会在当前栈顶位置创建一个新的栈帧。当函数返回时,栈帧会被弹出,将控制权返回给调用…

    JavaScript 2023年6月11日
    00
  • 浅谈Javascript嵌套函数及闭包

    浅谈Javascript嵌套函数及闭包 Javascript中的嵌套函数和闭包是一些高级概念,但对于深入理解Javascript这门语言来说是必不可少的。在这篇文章中,我们将探讨Javascript中嵌套函数和闭包的概念、特点以及如何使用它们。 嵌套函数 嵌套函数,就是在一个函数体中定义另一个函数。在Javascript中,函数是一等公民,也就是说函数可以作…

    JavaScript 2023年6月10日
    00
  • 分享Javascript中最常用的55个经典小技巧

    分享Javascript中最常用的55个经典小技巧 Javascript是当今最常用的编程语言之一,被广泛应用于Web应用程序、移动应用程序和背后的服务器端。在这里,我们将分享55个最常用的Javascript小技巧,以帮助你在日常编程任务中更高效地使用Javascript。 1. 使用解构语法进行多个变量赋值 在Javascript中,使用解构语法可以一次…

    JavaScript 2023年5月18日
    00
  • JS函数式编程之纯函数、柯里化以及组合函数

    函数式编程是一种以函数为中心的编程范式。在JavaScript中,函数式编程被越来越广泛地使用。本文将介绍函数式编程中的三个重要概念:纯函数、柯里化和组合函数。 纯函数 纯函数是指满足以下条件的函数: 给定相同的输入,总是返回相同的输出。 不产生副作用,即不会影响到函数外部的状态,如修改全局变量或参数。 纯函数的优点在于: 可以简化代码的测试和调试,因为纯函…

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