闭包笔记

总结笔记

自由变量:在函数中使用,但不是形参和局部变量的变量。

经典例子

第一种方法:

var data=[];

for (var k=0; k<3; k++){
  data[k] = (function(x){
    return function(){
      alert(x)
    };
  })(k);
}
data[0]();
data[1]();
data[2]();

第二种方法:

    var data = [];
    for (var k=0; k<3; k++){
        (data[k] = function(){
            alert(arguments.callee.x)
        }).x = k;
    }
    data[0]();
    data[1]();
    data[2]();

  

时间: 2024-10-21 03:50:27

闭包笔记的相关文章

javascript 闭包笔记

先来解释一下闭包: 1.闭包就是函数嵌套函数 2.内部函数可以引用外部函数的参数和变量 3.参数和变量不会被垃圾回收机制所收回( 垃圾回收机制就是用完变量之后就在内存中释放 ) 使用闭包的好处: 1.希望一个变量长期驻扎在内存当中 2.避免全局变量的污染 3.私有成员的存在 闭包的用法: 1.模块化代码 我们看一个闭包小实例 : function aa(){ var a = 5; // 函数中嵌套函数 function bb(){ a++; // 内部函数可以引用外部函数的参数和变量 alert

javascript从作用域到闭包-笔记

读<你不知道的javascript>一书做个笔记;编译原理:    js是一门编译型的语言,与传统编译语言类似,传统编译的过程分为三个阶段 ;     1. 分词/词法分析; 2.解析/语法分析; 3.代码生成 ;     js引擎在编译时会比较复杂 具体多么复杂我也不造,大概就是对1,3 进行了优化使其快速编译完成并立即执行,这里就要注意了,,js是在执行前编译的 也许几微秒就OK了1.作用域 :  // 收集并维护所有声明的变量组成一个查询机制,用一套严格的规则以确保当前执行的代码对这些变

学习闭包笔记

什么是闭包 闭 包是可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变 量).“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境 (作用域).在 Scala.Scheme.Common Lisp.Smalltalk.Groovy.JavaScript.Ruby. Python.Lua.objective c

闭包在.NET下的实现(编译器玩的小把戏)-----C#本质论读书笔记

参加工作以来,拜读过很多大作.有好多书读的时候感觉大彻大悟,不自觉的发出‘哦...’这样的感叹.但是随着杀猪刀(时间)不断的飞逝,不仅给我脸上带来了皱纹,还带走了不少前人总结和归纳的知识点和那些我还没来得及吸收的宝贵财富.好记性不如烂笔头,我决定开始写一些读书的笔记和工作上的心得,最好是两者能够结合起来,把知识真正的自己转化成自己的能力. 下面进入正题.闭包在程序员的日常工作几乎无所不在,当然不仅是工作,面试的时候经常也会有相关的题目.看过很多博客园上的朋友都有解释,每次重温都有‘哦...’的感

JavaScript闭包(Closure)学习笔记

闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1() { alert(n); } f1(); // 999 另一方面,在函数

Java程序员的JavaScript学习笔记(4——闭包/getter/setter)

计划按如下顺序完成这篇笔记: 理念. 属性复制和继承. this/call/apply. 闭包/getter/setter. prototype. 面向对象模拟. jQuery基本机制. jQuery选择器. jQuery工具方法. jQuery-在"类"层面扩展. jQuery-在"对象"层面扩展. jQuery-扩展选择器. jQuery UI. 扩展jQuery UI. 这是笔记的第4篇,聊聊闭包/getter/setter,看看JavaScript中的变量作

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

JavaScript闭包学习笔记

原文:JavaScript闭包学习笔记 闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. 1 var n=999; 2 3 function f1() { 4 alert

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =