javaScript循序渐进(3)
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
闭包(
closure
)
闭包意味着内层的函数可以引用存在于包围他的函数内的变量,即使外层函数的执行已经终止。这个特性非常强大和复杂。
例如:闭包如何使代码更清晰的两个例子
找出
ID
为‘
main’
的元素
var
obj=document.getElementById("main");
修改它的
border
样式
obj.style.border = "1px solid
red";
初始化一个在一秒后执行的回调函数
(callback)
setTimeout(function(){
她将隐藏此对象
obj.style.display = 'none';
},1000);
一个用于延时显示警告信息的通用函数
function delayedAlert(msg, time){
初始化一个封装的回调函数
setTimeout(function(){
她将包含本函数的外围函数传入的
msg
变量
alert(msg);
},time);
}
用两个参数调用
delayedAlert
函数
delayedAlert("zhangxinagrong",2000);
在一些函数式程序设计语言里,有一种称为
Curry
化得技术。本质上,
Curry
化是一种通过把多个参数填充到函数体中,实现将函数转换为一个新的经过简化的(使之接受的参数更少)函数的技术。
例如:用闭包实现的函数
Curry
化
数字求和函数的函数生成器
function addGenerator(num){
返回一个简单的函数,求两个数字的和,其中第一个数字来自生成器
return function(toAdd){
return num + toAdd;
};
}
addFive
现在包含一个接受单一参数的函数,这个函数能求得
5
加上该参数的和
var addFive = addGenerator(5);
这里我们可以看到,在传入参数为
4
时,
addFive
函数的结果是
9
alert(addFive(4)==9);
闭包还能解决另一个常见
JavaScript
编写问题。
通过自执行的匿名函数你可以把所有原本属于全局的变量都隐藏起来。
例如:使用匿名函数来隐藏全局作用域变量的例子
创建一个新的匿名函数,作为包装
(function(){
变量原本应该是全局的
var msg = "Thanks
zhangxiangrong";
将一个新函数绑定到全局对象
window.onunload = function(){
这个函数使用了“隐藏”的
msg
变量
alert(msg);
};
关闭匿名函数并执行之
})();
闭包的概念不容易理解和掌握。
推荐一篇精彩的解释
JavaScript
的闭包是如何工作的文章:
Jim
Jey
的
相关文档:
JavaScript就这么回事:基础知识
1 创建脚本块
1: <script language="JavaScript">
2: JavaScript code goes here
3: </script>
2 隐藏脚本代码
1: <script language="JavaScript">
2: <!--
3: document.write("Hello");
4: // -->
5: </script>
在不支持JavaScript的浏览 ......
面向对象的
JavaScript
引用(
reference
)
“引用”是一个指向对象实际位置的指针。这是一个极为强大的特性,但有一个前提:实际的对象肯定不会是引用。字符串永远是字符串,数组永远是数组。不过多个变量却能够指向同一对象。
JavaScript
基于的就是这样一个引用系统。
这门语言通过维护一系 ......
一直想对Javascript再次做一些总结,正好最近自己写了一个小型Js
UI库,总结了一下Js的继承机制,在网上也看了一些前辈们博客里的总结,感觉分析不是特别全面。这里仅仅是把自己的学习体会拿出来分享一下,希望对大家
学习Javascript有所帮助。
Javascript本身是从Perl语言的语法演变而来的,本质上是脚本语言 ......
<script type="text/javascript">
function checkform() {
//判断标题栏是否填写
if (document.form1.title.value == "") {
alert("信息类型不能为空!");
&nb ......