javascript闭包

转载 2012年03月31日 10:31:52

什么是闭包?

词法表示包括不必计算的的变量的函数,也就是说,该函数能够使用函数外定义的变量


全局变量是一个简单的闭包实现,代码如下:

var sMessage = "Hello, world!";

function sayMessage() {
    alert(sMessage);
}

sayMessage();

在函数中定义函数会产生闭包,代码如下:

var iBaseNum = 10;

function addNumbers(iNum1, iNum2) {
    function doAddition() {
        return iNum1 + iNum2 + iBaseNum;
    }
    return doAddition();
}
这里,函数doAddition()是个闭包,因为其要获取外部函数的参数iNum1、iNum2以及全局变量iBaseNum的值


闭包的样例

为了便于更好的理解闭包,贴几个样例,仅供参考,例子转载自coolshell

例子1:闭包中局部变量是引用而非拷贝

function say667() {
    var iNum = 666;
    var sayAlert = function() {
        alert(iNum);
    };
    iNum++;
    return sayAlert;
}

var sayAlert = say667();
sayAlert(); // outputs 667

例子2:多个函数绑定同一个闭包

function setupSomeGlobals() {
    var iNum = 666;
    gAlertNumber = function() {
        alert(iNum);
    };
    gIncreaseNumber = function() {
        iNum++;
    };
    gSetNumber = function(x) {
        iNum = x;
    };
}
      
setupSomeGlobals();
gAlertNumber(); // outputs 666
gIncreaseNumber();  
gAlertNumber(); // outputs 667  
gSetNumber(12);
gAlertNumber(); // outpusts 12  


闭包的应用

单例模式的实现,代码如下:

var singleton = function () {  
    var privateVariable;  
    function privateFunction(x) {  
        ...privateVariable...  
    }  
 
    return {  
	firstMethod: function(a, b) {  
	    ...privateVariable...  
        },  
	secondMethod: function(c) {  
	    ...privateFunction()...  
	}  
    };  
}();  








相关文章推荐

javaScript闭包

  • 2013-02-04 16:08
  • 546KB
  • 下载

JavaScript闭包.pdf

  • 2013-03-19 13:15
  • 546KB
  • 下载

node.js 与 javascript (通过闭包)如何简化事件驱动编程风格

本篇博客记录的是自己《nodejs高级编程》的笔记,内容非常基础= = 定义:当感兴趣的事件发生时由系统调用的函数来取代应用返回值的编程风格被称为事件驱动编程或者异步编程,这个是node的显著特征。...

Javascript 闭包完整解释

  • 2012-11-20 15:30
  • 100KB
  • 下载

javascript 闭包

  • 2013-06-08 07:15
  • 49KB
  • 下载

javascript深入理解js闭包

转自:http://www.jb51.net/article/24101.htm 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域...

JavaScript闭包

理解_JavaScript_闭包

  • 2011-12-27 16:37
  • 51KB
  • 下载

深入理解javascript闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)