每天学习一点Scala06_闭包

一个函数字面量的函数体通常只能使用输入参数和函数字面量内定义的本地变量.不过,Scala允许一个函数字面量使用它所在环境的变量.

所谓"闭包",指的是这样的一个函数字面量,它使用一个从其所在环境"捕获"到的非本地、非参数变量。有时人们会交替使用术语"函数字面量"和"闭包"。但是从技术上来说,它们并不相同。

下面是一个闭包的例子:

def encodeWithSeed(num:Int, seed:Int):Long = {
  def encode(x:Int,func:(Int)=>Int):Long = {
    val y = x + 1000;
    func(y);
  }
  val result = encode(num,(n:Int)=>(n*seed));
  result;
}
时间: 2024-08-09 21:52:24

每天学习一点Scala06_闭包的相关文章

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣.正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用Jav

学习总结 javascript 闭包

学习地址 :http://stackoverflow.com/questions/111102/how-do-javascript-closures-work 1,关于闭包的简单实现 //example 1 function sayHello(name) { var words = "hello," + name; var sayForAlert = function () { alert(words); } sayForAlert(); } //sayHello("jack

scala学习手记30 - 闭包

首先要弄白闭包的概念. 教材中的说法是:闭包是一种特殊的函数值,闭包中封闭或绑定了在另一个作用域或上下文中定义的变量.这里说闭包是一种特殊的函数值. 维基百科中的说法是:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体.闭包在运行时可以

JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象

目录 一.闭包(Closure) 1.1.闭包相关的问题 1.2.理解闭包 二.对象 2.1.对象常量(字面量) 2.2.取值 2.3.枚举(遍历) 2.4.更新与添加 2.5.对象的原型 2.6.删除 2.7.封装 三.函数 3.1.参数对象 (arguments) 3.2.构造函数 3.3.函数调用 3.3.1.call 3.3.2.apply 3.3.3.caller 3.3.4.Callee 3.5.立即执行函数表达式 (IIFE) 3.5.1.匿名函数与匿名对象 3.5.2.函数与函数

PHP的学习--PHP的闭包

php的闭包(Closure)也就是匿名函数,是PHP5.3引入的. 闭包的语法很简单,需要注意的关键字就只有use,use是连接闭包和外界变量. $a = function() use($b) {} 简单例子如下: function callback($fun) { $fun(); } $msg = "Hello, everyone"; $fun = function () use($msg) { print "This is a closure use string va

avaScript学习总结(二)——闭包、IIFE、apply、函数与对象 目录

一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div,for循环绑定事件. 示例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>闭包</title> <style type="

每天学习一点新技术,认真对待生活(es6中let的用法)

每天都要进步一点点!  今天开始学习新技术ES6 什么是ES6,ES2016,ES2017? ES6就是ES2015,也是一种泛指,指下一个新版本,从ES6开始,官方的叫法就不叫做ES6,叫做ES2015.以此类推. ES是一个不断迭代中的标准,一个功能是否最终进入ES标准,要经理四个阶段 stage0 最初的方案提案,并未经过大多数的慎重考虑 stage1 比较正规的提案 stage2 标准的提案 stage3 要考虑这个提案并融入标准之中. 以上是关于ES6的一些介绍,然后学习ES6之前应该

Swift学习(2函数闭包)

函数的定义 1.函数的基础写法 func 函数名(形参列表)->返回值类型 例: func sum(x:int ,y:int) -> int{ return x+y } print(sun(x:10,y:50)) 2.外部参数的使用,就是在形参前加一个名字,外部参数不会影响函数内部细节,外部参数会让外部调用看起来更加的直观 例:func sum(num1 x:int ,num2 y:int )-> int{ return x+y } print(sum(num1:30,num2:40))

Javascript学习笔记:闭包题解(3)

代码: 1 function assignHandler(){ 2 var element=document.getElementById('someElementId'); 3 4 element.onclick=function(){ 5 alert(element.id); 6 } 7 } 问题:请问以上代码是否存在内存泄漏? 正确答案:存在内存泄漏 解析:由于上段代码中存在闭包,闭包会保存包含该闭包的函数的作用域链,因此element对象会一直存在于内存中,不会被垃圾回收机制回收掉.那么