闭包之我的理解

经罗老湿( http://heeroluo.net/ ) 指点~~ 并且看了《Effective JavaScript Item 11 掌握闭包》这篇文章后,对闭包有了更加清晰的认识了。为了避免学而不思则罔,在此写下本人对闭包的了解,权当记录。

1:函数能够访问到其外部的变量。

function cupShow(color, weight) {
    console.log(‘this cup:‘+ ‘ ‘ + color + ‘ ‘ + weight);
}

function cupMake(sourceFn){
    var color = ‘red‘;
    var weight = ‘50g‘;
    return sourceFn(color, weight);
}

var closure = cupMake(cupShow); // this cup: red 50g 

  以上代码把cupShow函数作为参数传给cupMake。在cupMake内部访问了color变量和weight变量。

2: 闭包在创建它们的函数返回之后,还能够被访问到。

function cupShow(color, weight) {
    console.log(‘this cup:‘+ ‘ ‘ + color + ‘ ‘ + weight);
}

function cupMake(sourceFn){
    return function(){
        sourceFn.apply(this, arguments);
    };
}

var closure = cupMake(cupShow);
    closure(‘blue‘,‘30g‘); // this cup: blue 30g 

  以上代码中cupShow 函数被cupMake返回后,在匿名函数内部,cupShow仍然可以访问

  

  

  

时间: 2024-10-29 12:50:43

闭包之我的理解的相关文章

作用域、闭包等概念的理解

总结一下我对JS中这些基本却略纠结的概念的理解. 作用域 我们知道,JS不支持块级作用域,只支持函数作用域.函数体内,既不是局部变量,也不是参数的变量称为自由变量.如果没搞清楚函数的作用域,有时某些自由变量的值会与你所想的很不一样.举个简单例子 1 var a = 10; 2 3 function getA() { 4 alert(a); 5 } 6 7 (function() { 8 var a = 20; 9 getA(); //10 10 })(); 11 12 (function(fn)

谈谈我对闭包知识的深刻理解

在javascript中闭包应该是最难理解的一部分内容.在我看来闭包就是和作用域之间的联系. 1.首先我们来了解一下javascript中的作用域知识. javascript中的作用域其实就指的函数作用域,因为只有函数在javascript中才能形成区域范围.而函数作用域有一下特点. 1.1 函数能访问到外部的变量.案例一: var num = 123; function fn() { console.log(num);//输出的值为123 } fn(); 1.2 函数内的变量不能被外部访问到.

atitit.闭包的概念与理解attilax总结v2 qb18.doc

1.1. 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.1 2. #----闭包(Closures)的原理2 2.1. Atitti java预定义函数式接口  闭包的实现5 2.2. Atitit,闭包的原理以及与函数回调的区别5 1.1. 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数. 这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包

深入理解javascript闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function

javascript深入理解js闭包

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

深入理解js闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function

javascript闭包的理解-韩烨

javascript闭包是javascript的难点,很多人对js闭包不是很理解,我对js闭包一开始也是云里雾里,我刚刚进兴安得力的时候,做的转正试题中就有一个对闭包理解的题目.如何理解javascript的闭包呢?下面我们一起来学习一下: 闭包的含义和理解 通俗地讲,JavaScript 中每个的函数都是一个闭包,但通常意义上嵌套的函数更能够体现出闭包的特性,请看下面这个例子: var generateClosure = function() { var count = 0; var get

javascript深入理解js闭包(摘自网络)

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function

理解JavaScript闭包

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量.另一方面,在函数外部自然无法读取函数内的局部变量.(这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令.如果不用的话,你实际上声明了一个全局变量!) 二.如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量.但是,前面已经说过了,正常情况下,这是办不到的,只有通