匿名函数

立即执行函数 IIFE

倖福魔咒の 提交于 2019-12-27 00:24:20
立即执行函数表达式 IIFE(Immediately-invoked function expression) 我们知道,在javascript(ES5)中,是没有块级作用域的概念的。看一个例子 for (var i = 0; i < 5; i++) { } console.log(i); //5 因为没有块级作用域的概念,因此,在 for 循环中声明的 i 变量实际上是一个全局变量,因此可以在全局环境中访问的到。 块级作用域,也可以称为私有作用域。也就是说只在for循环的语句块中有定义,一旦循环结束,变量 i 就会被销毁。而在ES5中,我们主要通过匿名函数的方式来块级作用域。 用作块级作用域(私有作用域)的匿名函数的语法: (function() { //此处是块级(私有)作用域 })() 以上代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。看看这种写法是如何产生的 var a = function() { console.log(123); }; a(); //123 我们将一个匿名函数赋值给了一个全局变量a,然后调用了这个函数 当然也可以这样调用函数 var a = function() { console.log(123); }; a(); //123 既然这种方式可以立即执行一个函数

立即执行函数(IIFE)

十年热恋 提交于 2019-12-27 00:21:29
立即执行函数(IIFE)   看到这里,相信你一定迫不及待地想知道究竟如何做了吧,其实很简单,只需要用括号全部括起来即可,比如下面这样: (function(){ /* code */ }());   为什么这样就能立即执行并且不报错呢?因为在javascript里,括号内部不能包含语句,当解析器对代码进行解释的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明。   而立即执行函数并非只有上面的一种写法,写法真是五花八门: // 最常用的两种写法 (function(){ /* code */ }()); // 老道推荐写法 (function(){ /* code */ })(); // 当然这种也可以 // 括号和JS的一些操作符(如 = && || ,等)可以在函数表达式和函数声明上消除歧义 // 如下代码中,解析器已经知道一个是表达式了,于是也会把另一个默认为表达式 // 但是两者交换则会报错 var i = function(){ return 10; }(); true && function(){ /* code */ }(); 0, function(){ /* code */ }(); // 如果你不怕代码晦涩难读,也可以选择一元运算符 !function(){ /* code */ }();

Python之函数进阶

一世执手 提交于 2019-12-26 21:37:17
本节内容 上一篇中介绍了Python中函数的定义、函数的调用、函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一、递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数。如果一个函数在内部调用本身,这个函数就是一个递归函数。函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰。递归和循环都是一个重复的操作过程,这些重复性的操作必然是需要有一定的规律性的。另外,很明显递归函数也需要一个结束条件,否则就会像死循环一样递归下去,直到由于栈溢出而被终止(这个下面介绍)。 可见,要实现一个递归函数需要确定两个要素: 递归规律 结束条件 1. 实例:计算正整数n的阶乘 n! = 1 * 2 * 3 * ... * n 循环实现 思路有两个: 从1乘到n,需要额外定义一个计数器存放n当前的值 从n乘到1,无需额外定义计数器,直接对n进行减1操作,直到n=0返回1结束 def fact(n): if n == 0: return 1 result = 1 while n >= 1: result *= n n -= 1 return result 递归实现 先来确定递归函数的两个要素: 递归规律:n!=1 * 2 * 3 * ... * n = (n

Scala随笔--匿名函数

余生颓废 提交于 2019-12-26 19:11:23
概念 Scala中的函数 Scala是一个函数式编程的语言,意味着函数在Scala中时|“一等公民”,所以函数可以 作为参数或者返回值 来进行传递和接收 函数可以 定义在任何地方 ,函数可以定义函数 利用嵌套函数的形式来 延长变量的生命周期 的方式,称之为函数的 闭包 将函数作为返回值进行返回或者函数中包含的参数也是函数,这种函数称之为 高阶函数 递归函数 必须手动指定返回值类型,因为函数在递归结束之前,函数无法确定返回值类型,所以导致此时无法进行类型的推导 匿名函数的使用 简单使用 object Test { def main ( args : Array [ String ] ) { var inc = ( x : Int ) = > x + 1 println ( inc ( 1 ) ) var mul = ( x : Int , y : Int ) = > x * y println ( mul ( 3 , 4 ) ) } } 复杂一点的 val rdd3 = rdd1 . mapPartitions { x = > { val result = List [ Int ] ( ) var i = 0 while ( x . hasNext ) { i += x . next ( ) } result . : : ( i ) . iterator } } 来源: CSDN

Python中的匿名函数

六眼飞鱼酱① 提交于 2019-12-26 19:07:40
Python中的匿名函数 1.匿名函数 匿名函数:关键字为lambda ,冒号前面是形参 ,冒号后面是返回值 代码块重复:这时候必须考虑用到函数,降低程序的冗余度 代码块复杂:这时候可以考虑用到函数,降低程序的可读性 在Python中有两种函数,一种是def定义,一种是lambda函数 例如:求两个数之和(函数方法有两种) 普通函数: def fun(*args,**kwargs): return args,kwargs 匿名函数: lambda *args,**kwargs:(args,kwargs) 2.匿名函数的格式 lambda *args,**kwargs:(args,kwargs) 冒号前面是形参 ,冒号后面是返回值 3.匿名函数应用 示例1:求和 from functools import reduce print(reduce(lambda x,y:x+y,range(100))) 结果: 示例2:求1~10的平方(列表输出) def mypow(x): return x ** 2 # 等效于这个函数 print(list(map(lambda x:x**2,range(1,11)))) 结果: 示例3:1~100之间的偶数 def isood(num): return num%2 ==0 # 等效于这个函数 print(list(filter(lambda x:x

07-09 面向过程与函数式

假如想象 提交于 2019-12-26 14:58:09
[TOC] 一 编程范式 ​ 很多初学者在了解了一门编程语言的基本语法和使用之后,面对一个’开发需求‘时仍然会觉得无从下手、没有思路/套路,本节主题“编程范式”正是为了解决该问题,那到底什么是编程范式呢? 编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派,而在编程的世界里常见的流派有:面向过程、函数式、面向对象等,本节我们主要介绍前两者。 ​ 在正式介绍前,我们需要强调:“功夫的流派没有高低之分,只有习武的人才有高低之分“,在编程世界里更是这样,各种编程范式在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来一一解读它们。 插图:恶搞图62 二 面向过程 ​ ”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机械式的思维方式,这正好契合计算机的运行原理:任何程序的执行最终都需要转换成cpu的指令流水按过程调度执行,即无论采用什么语言、无论依据何种编程范式设计出的程序,最终的执行都是过程式的。 插图:恶搞图63 ​ 详细的,若程序一开始是要着手解决一个大的问题,按照过程式的思路就是把这个大的问题分解成很多个小问题或子过程去实现,然后依次调用即可,这极大地降低了程序的复杂度。举例如下: ​ 写一个数据远程备份程序,分三步

匿名函数

谁说我不能喝 提交于 2019-12-26 06:03:28
匿名函数的关键字 lambda 冒号前面是 形参 冒号后面是返回值 1~10的求和 from functools import reduce print ( reduce ( lambda x,y:x+y,range ( 1,11 )) ) 1~10的求积 from functools import reduce print ( reduce ( lambda x, y: x * y, range ( 1, 11 )) ) 1~10的取偶数 print ( list ( filter ( lambda x: x % 2 == 0, range ( 1, 11 )) )) 0~4的求平方 print ( list ( map ( lambda x: x ** 2, range ( 5 )) )) 来源: CSDN 作者: Mia1128 链接: https://blog.csdn.net/weixin_45606836/article/details/103705292

什么是lambda(函数)?

若如初见. 提交于 2019-12-24 11:05:07
对于没有计算机科学背景的人来说,计算机科学世界中的 lambda 是什么? #1楼 只是因为我在这里看不到C ++ 11的示例,所以我继续从 这里 发布这个不错的示例。 搜索之后,这是我能找到的最清晰的语言示例。 您好,Lambdas,版本1 template<typename F> void Eval( const F& f ) { f(); } void foo() { Eval( []{ printf("Hello, Lambdas\n"); } ); } 您好,Lambdas,版本2: void bar() { auto f = []{ printf("Hello, Lambdas\n"); }; f(); } #2楼 例如,在Javascript中,函数与其他所有类型( int , string , float , bool )被视为相同的混合类型。 这样,您可以即时创建函数,将其分配给事物,然后稍后再调用它们。 这很有用,但不是您想要过度使用的东西,否则您将使必须维护代码的所有人感到困惑。 这是我正在玩的一些代码,以查看此兔子洞的深度: var x = new Object; x.thingy = new Array(); x.thingy[0] = function(){ return function(){ return function(){ alert(

js 匿名函数 json

匆匆过客 提交于 2019-12-24 03:25:52
<script type="text/javascript"> var My_func = function(name){ this.obj_name=name; this.func1=function(id){ alert(id); alert(this.obj_name); } } var My_ajax={ "name":"kevin!", "debug":function(tel){ alert(tel); } }; </script> <script type="text/javascript"> var validate = new My_func('kevin'); validate.func1('20091121149'); alert(My_ajax.name); My_ajax.debug('15125843480') // alert('JSON: name'+ My_ajax.name +' gebug:'+My_ajax.debug()); </script> 来源: https://www.cnblogs.com/guolanzhu/p/3482336.html

JavaScript--匿名函数和闭包(16)

≡放荡痞女 提交于 2019-12-23 05:18:44
// 匿名函数:没有名字的函数; // 闭包:可访问一个函数作用域里的变量的函数; 一 匿名函数 1 // 普通函数 2 function box(){ // 函数名是box; 3 return 'Lee'; 4 } 5 box(); // =>Lee; 调用函数; 6 // 匿名函数 7 function(){ // 匿名函数,会报错; 8 return 'Lee'; 9 } 10 // 通过表达式自我执行 11 (function(name){ 12 console.log(name); // =>Lee; 13 })("Lee"); // "()"表示执行函数,并且可以传参; 14 // 把匿名函数赋值给变量 15 var box = function(){ // 将匿名函数赋给变量; 16 return 'Lee'; 17 }; 18 console.log(box()); // 调用方式和函数调用相似; 19 // 函数里的匿名函数 20 function box(){ 21 return function(name){ // 函数里的匿名函数,产生闭包; 22 return name; 23 }; 24 }; 25 console.log(box()("Lee")); // 函数box()调用匿名函数,并传参; 二 闭包 // 闭包