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 闭包完整解释

  • 2012年11月20日 15:30
  • 100KB
  • 下载

深入理解javascript原型和闭包

  • 2015年11月30日 16:37
  • 1.17MB
  • 下载

JavaScript关于作用域、作用域链和闭包的理解

作用域先来谈谈变量的作用域 变量的作用域无非就是两种:全局变量和局部变量。 全局作用域: 最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的: var oute...
  • whd526
  • whd526
  • 2017年04月29日 22:04
  • 339

javaScript闭包

  • 2012年03月22日 21:54
  • 1.03MB
  • 下载

javascript闭包详解

  • 2012年07月21日 10:53
  • 236KB
  • 下载

Javascript 中 作用域、闭包与 this 指针

js 中的作用域,闭包的理解和运用,this 的理解和运用

javascript闭包

  • 2011年06月04日 21:40
  • 546KB
  • 下载

JavaScript闭包及实现循环绑定事件

一、JavaScript作用域: var scope="global"; function t(){ console.log(scope); //"undefined" var sco...

javascript 闭包

  • 2013年06月08日 07:15
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript闭包
举报原因:
原因补充:

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