javascript语言精粹(函数2)
来源:互联网 发布:淘宝的一件代发是怎么 编辑:程序博客网 时间:2024/06/05 01:18
闭包
作用域的好处是内部函数可以访问它们外部函数的参数和变量(除了this和argumengts)
之前我们构造了一个myobject对象,它拥有一个value属性和一个Increment方法。假定我们希望保护该值不被非法更改。
和以对象字面量形式去初始化myObject不同,我们通过一个函数的形式去初始化myObject,该函数会返回一个对象字面量。函数里定义了一个value变量。该变量对Increment和getvalue方法总是可用的,但函数的作用域使得它对其他的程序来说是不可见的。
var myObject=(function(){ var value=0; return{ increment:function(inc){ value+=typeof inc==='number'?inc:1; }, getValue:function(){ return value; } } }());
我们并没有把一个函数赋值给myObject。我们是把调用该函数后返回的结果赋值给它。注意最后一行的()。该函数返回一个包含两个方法的对象,并且这些方法继续享有访问value变量的特权。
var quo=function(status){ return{ get_status:function(){ return status; } } } //构造一个quo实例 var myQuo=quo("amazed"); document.write(myQuo.get_status());
这个quo函数被设计成无需在前面加上new来u用,所以名字也没有首字母大写。当我们调用quo时,它返回包含get_status方法的一个新对象。该对象的一个引用保存在myQuo中,即使quo已经返回了,但get_status仍然享有访问quo对象的status属性的特权。get_status方法并不是访问该参数的一个副本,它访问的就是该参数本身。这是可能的。因为该函数可以访问它被创建时所处的上下文环境,这被称为闭包。
var fade=function(node){ var level=1; var step=function(){ var hex=level.toString(16); node.style.background: '#ffffff'+hex+hex; if(level<1){ level+=1; setTimeout(step,100); } }; setTimeout(step,100); } fade(document.body);
我们调用fade,把document.body作为参数传递给它(HTML标签所创建的节点)fade函数设置level为1.它定义了一个step函数,接着用来调用setTimeout,并传递step函数和一个时间(100毫秒)给它。然后它返回,fade函数结束。
在大约十分之一秒后,step函数被调用。它把fade函数的level变量转化为16位字符。接着,它修改fade函数得到节点的背景颜色。然后查看fade函数的level变量。如果背景色尚未变成白色,那么它增大fade函数的level变量,接着用setTimeout预定让它自己再次运行。
step函数很快再次被调用。但这次,fade函数的level变量值变成2.fade函数在之前已经返回了,但只要fade的内部函数需要,它的变量就会持续保持。
//构造一个函数,用正确的方式给一个数组中的节点设置时间处理程序
//点击一个节点,将会弹出一个对话框显示节点的序号
var number=function(ul){ var helper=function(i){ return function(e){ alert(i); } } var i; for(i=0;i<nodes.length;i++){ nodes[i].onclick=helper(i); } }
回调
模块
我们可以使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态与实现的函数或对象。通过使用产生模块,我们几乎可以完全摒弃全局变量的使用,
- javascript语言精粹(函数2)
- 函数 -- Javascript语言精粹
- javascript语言精粹(函数)
- 读《JavaScript语言精粹》2
- 函数(二)----Javascript语言精粹
- 《JavaScript语言精粹》--第4章:函数
- JavaScript语言精粹【语法、对象、函数】
- JavaScript语言精粹——函数
- JavaScript语言精粹之函数篇(一)
- JavaScript语言精粹之函数篇(二)
- JavaScript语言精粹之函数篇(三)
- javascript语言精粹笔记(三)函数
- 《javascript语言精粹》读书笔记——函数
- 《JavaScript语言精粹》笔记--函数的调用
- 《JavaScript语言精粹》笔记(3)--函数
- 《JavaScript语言精粹》笔记(2)--对象
- 《JavaScript语言精粹》读书笔记
- 《JavaScript语言精粹》读书笔记
- C++日志库_spdlog
- Python 学习 第二天
- ajax中post方法传参数,会丢失&,%,+',要转义
- Optimizing graphics performance
- Android FileHelper 打开各种类型文件
- javascript语言精粹(函数2)
- Java时间格式转换大全
- RecyclerView setHasFixedSize(true)的意义
- 《java基础学习之——自定义注解》
- mysql 多字段求和排序/分组排序(旧事拾遗)
- Python List index方法
- PHP探索之旅—-字符串String
- flybird飞翔的小鸟步骤分解
- 数据科学—数据科学行业的8个关键角色