关闭

javascript闭包

标签: javascriptfunctionc
145人阅读 评论(0) 收藏 举报
分类:

什么是闭包?

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


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

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()...  
	}  
    };  
}();  








0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8755次
    • 积分:133
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:20篇
    • 译文:0篇
    • 评论:0条
    文章存档