浅析JavaScript中的特殊函数及用法小结

目录

写在前面

 匿名函数

回调函数

自调函数

作为值的函数

写在前面

JavaScript中的函数本质上是一个对象,我们可以将这个对象赋值给一个变量,这就使JavaScript中的函数变得非常的灵活,现在就来浅看一下JavaScript中函数的一些用法。

 匿名函数

JavaScript 可以将函数作为数据使用。作为函数本体,它与普通的数据一样,不一定有名字。没有名字的函数被称之为匿名函数。

示例代码如下:

//匿名函数 function(){ //匿名函数,会报错 return '一碗周'; }

但是在 JavaScript 并不支持匿名函数的语法,不过匿名函数有两个应用,如下所示:

回调函数:将一个函数作为另一个函数的参数使用,作为参数的函数自调函数:函数调用自身(定义即调用的函数) 回调函数

然函数与任何可以被赋值给变量的数据是相同的,那么它当然可以像其他数据那样被定义、删除、拷贝,以及当成参数传递给其他函数。

当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数。作为使用回调函数的函数称为目标函数(外层函数)

示例代码如下所示

// 定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。 function sum(a, b) { // -> 目标函数 return a() + b() } function one() { // -> 回调函数 return 1; } function two() { // -> 回调函数 return 2; } console.log(sum(one, two)); // 3

执行流程如下:

当执行 sum 函数时,传入两个实参,在 sum 函数中,会将两个实参作为函数执行,并将返回值计算并返回。

匿名回调函数

所谓匿名回调函数,就是目标函数中的参数是没有名称的函数,将上一段代码修改为使用匿名回调函数

// 定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。 function sum(a, b) { // -> 目标函数 return a() + b() } console.log(sum( function () { // -> 匿名回调函数 return 1 }, function () { // -> 匿名回调函数 return 2 })); // 3

带参数的回调函数

function multiplyByTwo(a, b, c, callbakc) { var i, ar = [] for (i = 0; i < 3; i++) { // 通过 arguments 对象将传入的参数 * 2,然后传入回调函数进行操作 ar[i] = callbakc(arguments[i] * 2); } return ar; } console.log(multiplyByTwo(1, 2, 3, function (a) { // 匿名回调函数 return a + 2 }));

回调函数的优点:

匿名回调函数节省了全局命名空间将私有的数据内容开放给指定位置使用保证封装性 - 虽然可以使用私有数据,但是并不知道来源有助于提升性能

但是回调函数也是有缺点的,当目标函数的参数是一个回调函数时,回调函数的参数又是另一个回调函数,另一个回调函数的参数还是一个回调函数…也就是套娃,也就形成了回调陷阱或称回调地狱

自调函数

目前我们已经讨论了匿名函数在回调方面的应用。接下来我们讨论另外一种情况,即自调函数,这种函数可以在定义后立即调用。示例代码如下所示

( function () { console.log("自调函数"); } )()

这种语法看上去有点唬人,其实没有什么,我们只需将匿名函数的定义放进一对括号中,然后外面再紧跟一对括号即可。

语法结构如下图所示

值得注意的是,自调函数可以命名,但是还是会自调用,如果用函数名调用的话会抛出异常

自调函数除了以上两种方式外,还有以下几种不常用的方式

+ function (v) { // 形参 var w = 100; // 局部变量 console.log("自调函数" + v); }(1);// 实参 ! function (v) { var w = 100; // 局部变量 console.log("自调函数" + v); }(2); ~ function (v) { var w = 100; // 局部变量 console.log("自调函数" + v); }(3);

使用即时自调匿名函数的好处是不会产生任何全局变量。

缺点在于这样的函数是无法重复执行的(除非将它放在某个循环或其他函数中)。这也使得即时函数非常适合于执行一些一次性的或初始化的任务。

作为值的函数

将一个函数作为另一个函数的结果并返回,作为结果返回的函数称之为作为值的函数

示例代码如下:

function outer() { var v = 100; // 在函数的函数体中定义另一个函数 -> 内部(私有)函数 return function () { // 使用匿名函数 return v * 2 } } var result = outer(); console.log(result); // [Function] // 或者下面这种方式与上面那种方式相同 function outer1() { var v = 100; // 在函数的函数体中定义另一个函数 -> 内部(私有)函数 function inner() { return v * 2 } return inner } var result1 = outer1(); console.log(result1); // [Function: inner]

这样做的好处是:

有助于我们确保全局名字空间的纯净性(这意味着命名冲突的机会很小)。确保私有性 — 这使我们可以选择只将一些必要的函数暴露给“外部世界”,而保留属于自己的函数,使它们不为该应用程序的其他部分所用。

到此这篇关于JavaScript中的特殊函数的文章就介绍到这了,更多相关js特殊函数内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    无法读取U盘中的数据

    无法读取U盘中的数据,,核心提示:我有一个512MB的U盘,把它插在电脑显示器里面是空的,但右键单击以查看已经使用USB 480mb文件的属性未设置为隐

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    EXCEL数据透视表怎么用?是干什么的

    EXCEL数据透视表怎么用?是干什么的,透视,干什么,怎么,excel透视表:数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等

    通过备份记录获得数据库的增长

    通过备份记录获得数据库的增长,,通常你想知道数据库是否正在增长,以及它增长了多少,可能比较数据库中每个历史时期的大小。 但是我们怎样才