js中匿名函数的N种写法

yizhihongxing

接下来我将为您详细讲解 “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中的注释使用与注意事项小结

    当我们编写Javascript代码时,除了编写实际的功能代码,还会添加注释来帮助我们理解代码并使别人也能理解代码。在本篇攻略中,我将详细讲解Javascript中注释的使用和注意事项。 注释的基本语法 Javascript支持两种类型的注释:单行注释和多行注释。 单行注释 单行注释用于在一行代码中添加注释。在单行注释的开头使用两个斜杠(//)表示,接着添加注…

    JavaScript 2023年6月11日
    00
  • 基于JavaScript实现简单的轮播图

    下面就是基于JavaScript实现简单的轮播图的完整攻略: 1. 轮播图是什么? 轮播图指的是在网页上展示多张图片的方式之一。通常会设置一个区域,在该区域内依次展示不同的图片,经过一定的时间后,自动切换到下一张图片,循环往复。轮播图常用于网站的banner、产品展示等方面,能够吸引用户的眼球,提高网站的用户视觉体验。 2. 实现轮播图的原理 实现轮播图的关…

    JavaScript 2023年6月11日
    00
  • jQuery.validate.js表单验证插件的使用代码详解

    那我就来详细讲解一下“jQuery.validate.js表单验证插件的使用代码详解”的攻略吧。 什么是jQuery.validate.js表单验证插件? jQuery.validate.js是一个jQuery的表单验证插件,它可以方便地实现表单输入内容的合法性检测和提示。 如何引入jQuery.validate.js? 在使用jQuery.validate…

    JavaScript 2023年6月10日
    00
  • 收集的一些Array及String原型对象的扩展实现代码

    收集的一些Array及String原型对象的扩展实现代码,是指在JavaScript中对Array和String原型对象进行扩展,添加新的方法或修改原方法的实现代码集合。 下面是针对该攻略的详细解释和过程: 了解JavaScript中的原型对象 在JavaScript中,每个对象都有一个原型对象。原型对象是另一个对象,其中包含一组可共享的属性和方法。在面向对…

    JavaScript 2023年6月10日
    00
  • javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element

    当onmousedown、onmouseup、onclick三个事件同时应用于同一个标签节点Element时,以下是攻略: 原理: onmousedown事件:当鼠标按下某个键时触发。 onmouseup事件:当鼠标松开某个键时触发。 onclick事件:当鼠标单击某个元素时触发。 当用户按下鼠标键时,会先触发onmousedown事件,当用户松开鼠标键时,…

    JavaScript 2023年6月10日
    00
  • 纯jsp实现的倒计时动态显示效果完整代码

    下面是实现纯jsp实现的倒计时动态显示效果完整代码攻略。 1. 实现原理 倒计时动态显示效果的实现原理是通过js倒计时功能实现动态效果,然后将倒计时的时间以jsonp格式传递到服务器端,服务器端通过jsp读取到jsonp数据并通过JSTL表达式解析并进行动态页面输出,从而实现了倒计时的动态效果,并将显示效果不断地随时间改变。 2. 实现步骤 创建一个html…

    JavaScript 2023年6月11日
    00
  • npm scripts 使用指南详解

    首先介绍一下npm scripts,它是一个在执行npm命令时可以运行的脚本。我们可以通过定义不同的脚本来完成一些常规的任务,例如编译,测试,打包等。 如何定义npm scripts npm scripts 的定义需要在 package.json 文件中进行。在 package.json 文件中,可以使用 “scripts” 字段来定义脚本。例如,我们可以在…

    JavaScript 2023年5月27日
    00
  • 浅谈JavaScript数据类型及转换

    浅谈JavaScript数据类型及转换 JavaScript是动态类型语言,它不需要提前声明变量数据的类型。这意味着变量的数据类型是在运行时才确定的。在JavaScript中,常见的数据类型包括: 原始类型:字符串(String)、数字(Number)、布尔值(Boolean)、空值(Null)、未定义(Undefined)和Symbol(ES6新增)。 引…

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