函数篇之2——匿名函数

1.  匿名函数实例:

>>> function ( a ){ return a; }

匿名函数也就是说没有方法名。

2.  匿名函数的主要用法:

2.1 我们可以将匿名函数作为参数传递给其它函数,这样,接收方函数就能利用我们所传递的函数来完成某些事情。

2.2 我们可以定义某个匿名函数来执行某些一次性任务。

3.  接下来,我们来看具体的应用示例,通过其中的细节来进一步了解匿名函数。

3.1 回调函数

①.  解释: 当我们将函数A 传递给函数B ,并由B 来执行A 时,A 就成了一个回调函数(callback function)。

如果这时A 还是一个无名函数,那么我们就称它为匿名回调函数

②. 回调函数的优势:

>>1.  它可以让我们在不做命名的情况下传递函数(这意味着可以节省全局变量)。

>>2.  我们可以将一个函数调用操作委托给另一个函数(这意味着可以节省一些代码编写工作)。

>>3.  它们也有助于提升性能。

③.  回调示例:

function multiplyByTwo(a , b , c) {

var i ,ar = [ ] ;

for ( i = 0 ; i <  3 ; i++) {

ar [ i ] = arguments [ i ] * 2;

}

return ar;

}

function addOne( a ) {

return a +1 ;

}

现在,我们来测试一下这两个函数:

>>>  multiplyByTwo( 1, 2, 3 );

运行结果:[ 2, 4 ,6 ]

>>>  addOne( 100 );

运行结果:101

接下来,我们要实现这三个元素在两个函数之间的传递,这需要定义一个用于存储元素的数组。我们先从multiplyByTwo ( ) 的调用开始:

>>>  var myarr = [ ] ;

>>> myarr = multiplyByTwo ( 10 , 20 ,30 );

运行结果: [ 20 , 40 ,60 ]

然后,用循环遍历每个元素,并将它们分别传递给 addOne() 。

>>>  for ( var i =0 ; i < 3; i++ ) {  myarr [ i ] = addOne (myarr [ i ] );}

>>>  myarr

运行结果: [21 ,41, 61]

如您所见,这段代码可以工作,但是显然还有一定的改善空间。特别是这里使用了两个循环,如果数据量很大或循环操作很复杂的话,开销一定不小。因此,我们需要将它们合二为一。这就需要对multiplyByTwo() 函数做一些改动,使其接受一个回调函数,并在每次迭代操作中调用它。具体如下:

function multiplyByTwo (a , b, c, callback) {

var i , ar = [ ];

for ( i = 0 ; i< 3 ; i ++){

ar [ i ]  = callback(arguments [ i ] * 2);

}

return ar;

}

函数修改完成后,之前的工作只需要一次函数调用就够了,我们只需像下面初始值和回调函数传递给它即可:

>>>   myarr = multiplyByTwo ( 1 ,2 ,3, addOne );

运行结果:[ 3, 5, 7]

我们还可以用匿名函数来代替addOne(),这样做可以节省一个额外的全局变量。

>>>  myarr   = multiplyByTwo( 1, 2, 3, function (a ) { return  a + 1} );

运行结果:[3 , 5 , 7]

而且,使用匿名函数也更易于随时根据需求调整代码。例如:

>>>   myarr = multiplyByTwo ( 1 ,2 ,3, function( a ) { return a + 2; } );

运行结果:[4, 6, 8]

3.2   自调函数

目前我们已经讨论了匿名函数在回调方面的应用。接下来,我们来看匿名函数的另一个应用示例——这种函数可以在定义后自行调用。比如:

{

function (){

alert( ‘boo‘ );

}

}( )

这种语法看上去有点吓人,但其实很简单——我们只需要将匿名函数的定义放进一对括号中,然后外面再紧跟一对括号即可。其中,第二对括号起到是“立即调用”的作用,同时它也是我们向匿名函数传递参数的地方。

(

function ( name ) {

alert( ‘ hello ‘ + name + ‘ ! ‘);

}

)(‘dude‘)

使用自调匿名函数的好处在于这样不会产生任何全局变量。当然,缺点是这样的函数是无法重复执行的(除非您将它放在某个循环或其它函数中)。这也使得匿名自调函数最适合于执行一些一次性的或初始化的任务。

函数篇之——函数也是数据

时间: 2024-10-06 18:54:42

函数篇之2——匿名函数的相关文章

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

基础篇 本章大纲: 协程函数 递归函数 匿名函数lambda 内置函数map reduce filter  max min zip sorted 匿名函数lambda和内置函数结合使用 面向过程编程与函数编程 模块与包的使用 re模块内置函数 一,协程函数 注意:函数先定义,后使用.这是函数第一原则.函数主要分为定义,调用 1.1,什么是协程函数 协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种 1.2,协

【函数】02、匿名函数、生成器、高阶函数

一.匿名函数 1.定义 语法格式: lambda args:expression args:以逗号分隔的参数列表 expression:用到args中各参数的表达式 lambda定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和非表达式,如for和while等 lambda的首要用途是指定短小的回调函数 lambda将返回一个函数而不是将函数赋值给某变量名 In [77]: lambda x: x+1 Out[77]: <function __main__.<lamb

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能. 1.函数的功能 代码重复性使用 模块化编程 2.语法: 使用函数前要先定义才能使用 函数定义有三个部分:函数名,参数列表,函数体 格式: 1 function 函数名([参数1, 参数2, ...]){ 2 3 函数执行部分; 4 5 return 表达式; 6 7

14、内置函数、递归函数、匿名函数

一.内置函数 # print(abs(-1))# print(all([1,2,3]))# print(all([0,2,3])) # print(all('')) # print(any([0,None,'',1]))# print(any([0,None,'']))# print(any([])) # print(bin(3))# print(hex(17))# print(oct(9)) #0 None 空===>bool值为False,其余都为True # def func():# pa

Python 学习笔记 -- 内嵌函数、闭包、匿名函数、高阶函数map、高阶函数filter、高阶函数reduce

1 #------------------------------内嵌函数------------------------------ 2 #内嵌函数就是在函数内部定义函数 3 #实例一 4 print("#------------------------------内嵌函数------------------------------") 5 def funOutOne(): 6 x = 5 7 def funIn(): 8 x = 3 9 print("My funOutO

高阶函数、返回函数、闭包、匿名函数、装饰器、偏函数

整理多个网友知识: 一.高阶函数(函数作为变量,传给另外一个函数使用) 高阶函数例子: 备注:math模块sqrt()函数求平方根. #!/usr/bin/env python #-*- coding:utf-8 -*- import math def add(x, y, f):     return f(x) + f(y) print add(100, 16, math.sqrt) [[email protected] ~]# python test1.py  14.0 内置高阶函数: (1)

JS执行顺序-函数声明提升、匿名函数、函数表达式

大方向上: JS 是按照 代码块 进行 编译.执行 的. 学习至: 1.变量声明提升 2.新唐的博客 3.js中匿名函数的创建与调用方法分析 4.前端圣经 - 高程三 5.深入理解变量声明提升和函数声明提升 因为没有好好地分类.可能会比较杂.为了系统地学习,先了解几个概念. 一. <script> 区分的代码块. JS是按照代码块 编译 和 执行的.代码块间 相互独立,但是 变量和方法 共享. <script> alert('代码块一'); </script> <

嵌套函数和作用域和匿名函数

#嵌套函数 def func1(): print('alex') def func2(): print('eric') func2() func1() #===>1.函数内部可以再次定义函数.2.执行需要被调用 age = 19 def func1(): print(age) def func2(): print(age) func2() #==>19 func1() #==>19 #由内而外调用直 age = 19 def func1(): print(age) def func2()