ES3之closure ( 闭包 )

闭包是函数和声明该函数的词法环境的组合。

JavaScript中的函数会形成闭包。 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。

function playGame(){
    var name = ‘Ace Combat‘;
    function playGame_(){
        console.log(‘[play game]‘,name);
    }
    return playGame_;
}
var play = playGame();
play();

创建多个闭包

playA 和 playB 都是闭包。它们共享相同的函数定义,但是保存了不同的词法环境。在 playA的环境中,game 为 Ace Combat。而在 playB 中,game 则为 Neo Contra。

function playGame(game) {
    function playGame_() {
        console.log(‘[play game]‘, game);
    }
    return playGame_;
}
var playA = playGame(‘Ace Combat‘);
var playB = playGame(‘Neo Contra‘);
playA();
playB();

原文地址:https://www.cnblogs.com/sea-breeze/p/8994733.html

时间: 2024-10-13 16:36:46

ES3之closure ( 闭包 )的相关文章

javascript Closure 闭包

引用自 http://www.cnblogs.com/mguo/archive/2013/06/19/3143880.html /*一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量.*/ var n=999; function f1(){ alert(n); } f1(); // 999//另一方面,在函数外部自然无法读取函数内的局部变量. funct

java 8 closure 闭包

在functional programming 里面经常提及closure 闭包. 那么究竟闭包是一个什么东东? 让人如何难以理解呢? 1 闭包定义 closure is an instance of a function that can reference nonlocal variables of that function with no restrictions.这是闭包的英文定义.说实在这段定义确实很抽象让人难以理解. 然后我这里其实有两个点把这段定义具体化: 1.1. 闭包就是允许

【Javascript 拾遗之三】 Closure 闭包

说起闭包这个概念,其实是离散数学中的一种定义,而很程序员们耳熟能详但不一定能说清楚它的含义和用途.本文先简单地介绍下离散数学中的闭包,然后再探讨一下Javascript语言中的闭包是如何创建和应用的. Closure 闭包 1.闭包的定义 -离散数学 一个关系不具有自反, 对称, 传递这3种基本性质之一,但均可以通过对该关系的扩充(在关系中增添序偶),使扩充后的关系具有这种性质,这种包含该关系的最小扩充称为该关系关于这种性质的闭包. 下面给出闭包的定义:设R是X上的关系,R的自反(或对称,传递)

PHP Closure(闭包)类详解

Closure 面向对象变成语言代码的复用主要采用继承来实现,而函数的复用,就是通过闭包来实现.这就是闭包的设计初衷. 注:PHP里面闭包函数是为了复用函数而设计的语言特性,如果在闭包函数里面访问指定域的变量,使用use关键字来实现. PHP具有面向函数的编程特性,但是也是面向对象编程语言,PHP 会自动把闭包函数转换成内置类 Closure 的对象实例,依赖Closure 的对象实例又给闭包函数添加了更多的能力. 闭包不能被实例(私有构造函数),也不能被继承(finally 类).可以通过反射

access to modified closure 闭包的问题

for (int i = 0; i < listBoxDevices.Items.Count; i++) { var tempDeviceId = listBoxDevices.Items[i].ToString(); if (tempDeviceId.Contains("(掉线)")) { var id = GlobalConvert.GetDeviceID(tempDeviceId.Replace("(掉线)", string.Empty)); if (i

modern php closure 闭包

* 在array_map()函数中使用闭包 <?php $numbersPlusOne = array_map(function($number) { return $number + 1; }, [1,2,3]); print_r($numbersPlusOne); $ php numbersPlusOne.php Array( [0] => 2 [1] => 3 [2] => 4) * 使用use关键字附加闭包的状态 <?php function enclosePerso

Swift:闭包

一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Are Reference Types) 闭包是自包含的函数代码块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的

JavaScript从作用域到闭包

作用域(scope) 全局作用域和局部作用域 通常来讲这块是全局变量与局部变量的区分. 参考引文:JavaScript 开发进阶:理解 JavaScript 作用域和作用域链 全局作用域:最外层函数和在最外层函数外面定义的变量拥有全局作用域. 1)最外层函数和在最外层函数外面定义的变量拥有全局作用域 2)所有末定义直接赋值的变量自动声明为拥有全局作用域,即没有用var声明的变量都是全局变量,而且是顶层对象的属性. 3)所有window对象的属性拥有全局作用域 局部作用域:和全局作用域相反,局部作

4 .Swift函数|闭包

在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Swift中函数的表现形式如下: 1. func 函数名(参数名1:参数类型,参数名2,参数类型)->返回值类型 {函数的实现部分} func sayHello()->Void { print("hello world") } //有参数,有返回值, func sayHello2(