JavaScript闭包实例讲解
2014-04-22 00:00
435 查看
这带来的好处是内部函数可以访问定义它们的外部函数的参数和变量。
首先,我们来构造一个简单的对象。
这样写就有一个问题,value值不能保证不会被非法修改,可以按如下的方法进行修改。
我们可以通用调用一个函数的形式去初始化testObj,该函数会返回一个对象字面量,函数里定义了一个value变量,该变量对add和getValue方法总是可用的,但函数的作用域使得它对其他的程序来说是不可见的。同时,我们还可以得出一个结论,内部函数拥有比它的外部函数更长的生命周期。
我们再继续看一个构造函数调用的例子。
这样写并没有错,但是会有一点“多此一举”,为什么要用一个getStatus方法去访问一个本可以直接访问到的属性呢?如果status是私有属性,那当然才有意义。
这里当我们调用obj的时候,它返回包含getStatus方法的一个新对象,该对象的一个引用保存在myObj中,即使obj已经返回了,但getStatus方法仍然享有访问obj对象的status属性的特权。getStatus方法并不是访问该参数的一个副本,它访问的就是该参数本身。这是可能的,因为该函数可以访问它被创建时所处的上下文环境,这被称为闭包。
首先,我们来构造一个简单的对象。
var testObj = { value: 10, add: function(inc){ this.value += (typeof inc === "number") ? inc : 1; } }; testObj.add(); testObj.value; // 11 testObj.add(2); testObj.value; // 13
这样写就有一个问题,value值不能保证不会被非法修改,可以按如下的方法进行修改。
var testObj = (function(){ var value = 10; return { add: function(inc){ value += (typeof inc === "number") ? inc : 1; }, getValue: function(){ return value; } }; })(); testObj.add(); testObj.getValue(); // 11 testObj.add(2); testObj.getValue(); // 13
我们可以通用调用一个函数的形式去初始化testObj,该函数会返回一个对象字面量,函数里定义了一个value变量,该变量对add和getValue方法总是可用的,但函数的作用域使得它对其他的程序来说是不可见的。同时,我们还可以得出一个结论,内部函数拥有比它的外部函数更长的生命周期。
我们再继续看一个构造函数调用的例子。
var MyObj = function(str){ this.status = str; }; MyObj.prototype.getStatus = function(){ return this.status; }; var obj = new MyObj("javascript"); obj.getStatus(); // "javascript"
这样写并没有错,但是会有一点“多此一举”,为什么要用一个getStatus方法去访问一个本可以直接访问到的属性呢?如果status是私有属性,那当然才有意义。
var obj = function(status){ return { getStatus: function(){ return status; } }; }; var myObj = obj("javascript"); myObj.getStatus(); // "javascript"
这里当我们调用obj的时候,它返回包含getStatus方法的一个新对象,该对象的一个引用保存在myObj中,即使obj已经返回了,但getStatus方法仍然享有访问obj对象的status属性的特权。getStatus方法并不是访问该参数的一个副本,它访问的就是该参数本身。这是可能的,因为该函数可以访问它被创建时所处的上下文环境,这被称为闭包。
相关文章推荐
- 实例讲解使用原生JavaScript处理AJAX请求的方法
- JavaScript作用域、闭包、对象与原型链概念及用法实例总结
- 实例讲解用Javascript调用ASP实现过程 (转载)
- javascript 闭包详解及简单实例应用
- JavaScript 闭包机制详解及实例代码
- 实例讲解JavaScript的Backbone.js框架中的View视图
- 实例讲解使用原生JavaScript处理AJAX请求的方法
- javascript跑马灯抽奖实例讲解
- javascript闭包的高级使用方法实例
- javascript表单控件实例讲解
- javascript对下拉列表框(select)的操作实例讲解
- JavaScript之创意时钟项目(实例讲解)
- 实例讲解Python的函数闭包使用中应注意的问题
- javascript 玩转Date对象(实例讲解)
- 使用JavaScript实现表格编辑器(实例讲解)
- javascript滚轮事件基础实例讲解(37)
- JavaScript基础应用 制作无缝滚动图实例与DOM基础知识讲解
- javascript闭包的理解和实例
- javascript兼容性(实例讲解)