javascript createAdder函数功能与使用说明

英文原文
createAdder(x) is a function that returns a function. In JavaScript, functions are first-class objects: they can be passed to other functions as arguments and returned from functions as well. In this case, the function returned is itself a function that takes an argument and adds something to it.

Here’s the magic: the function returned by createAdder() is a closure. It “remembers” the environment in which it was created. If you pass createAdder the integer 3, you get back a function that will add 3 to its argument. If you pass 4, you get back a function that adds 4. The addThree and addFour functions in the above example are created in this way.

Let’s take another look at the addLoadEvent function. It takes as its argument a callback function which you wish to be executed once the page has loaded. There follow two cases: in the first case, window.onload does not already have a function assigned to it, so the function simply assigns the callback to window.onload. The second case is where the closure comes in: window.onload has already had something assigned to it. This previously assigned function is first saved in a variable called oldonload. Then a brand new function is created which first executes oldonload, then executes the new callback function. This new function is assigned to window.onload. Thanks to the magical property of closures, it will “remember” what the initial onload function was. Further more, you can call the addLoadEvent function multiple times with different arguments and it will build up a chain of functions, making sure that everything will be executed when the page loads no matter how many callbacks you have added.

Closures are a very powerful language feature but can take some getting used to. This article on Wikipedia provides more in-depth coverage.

中文翻译:有更好的可以留言。大体意思差不多了

createAdder(x)是一个函数,返回一个函数。在JavaScript中,函数是第一类对象:另外它们可以被传递到其他函数作为参数和函数返回。在这种情况下,函数返回本身就是一个函数接受一个参数,并增加了一些东西。

在这里,Äôs the magic:由createAdder返回函数()是一个闭包。它,Äúremembers,非盟在创建它的环境。如果传递createAdder整数3,你回来一个函数,将增加3至其参数。如果你通过四,你回来一个函数,增加了4。该addThree在上面的例子addFour职能创造这样的。

让,星光大道可以再一次看看addLoadEvent功能。这需要将执行一次页面已加载为一个回调函数的参数,你的愿望。有下列两种情况:在第一种情况,在window.onload已经没有分配给它一个函数,因此函数简单的回调在window.onload分配。第二个案例是在关闭的时候:在window.onload已经有分配给它的东西。这是以前分配的功能首次在一个名为oldonload变量保存。然后,一个全新的功能是创建的第一个执行oldonload,然后执行新的回调函数。这一新功能被分配在window.onload。神奇的封锁财产感谢,它会Äúremember,非盟最初的onload什么功能。进一步,你可以调用函数的addLoadEvent多次与不同的参数,它会建立一个职能链,确保一切都将在页面加载时执行,不管你有多少回调增加。

闭包是一个非常强大的语言功能,但可能需要一些时间来适应。这种对维基百科的文章提供了更深入的报道。

核心代码

复制代码 代码如下:

function createAdder(x) {
return function(y) {
return y + x;
}
}
addThree = createAdder(3);
addFour = createAdder(4);
document.write('10 + 3 is ' + addThree(10) + '<BR>');
document.write('10 + 4 is ' + addFour(10));
document.write('-10 + 4 is ' + addFour(-10));


演示代码:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
由于JQuery中,提交表单是像下面这样的: 复制代码 代码如下: $('#yigeform').submit() 所以,想当然的认为,重置表单,当然就是像下面这样子喽: 复制代码 代码如下: $('#yigeform').reset() 但是,不幸的是,这样写的话,会有一个让你很郁闷的结果,那就是,表单无法重置! 后来,上网查了一下,说是,JQuery中没有reset方法,经核对,果然是没有。 那有么没有办法通过JQuery来重置表单呢,答案是有的,不过是一种间接的方法,如下: 复制代码 代码如下: $
.children(selector) 方法是返回匹配元素集合中每个元素的 所有子元素 ( 仅儿子辈 )。参数可选,添加参数表示通过选择器进行过滤,对元素进行筛选。 .find(selector)方法是返回匹配元素集合中每个元素的 后代 。 参数是必选的 ,可以为选择器、jquery对象可元素来对元素进行筛选。 .find() 与 .children() 方法类似,不同的是后者仅沿着 DOM 树向下遍历单一层级。这里的children,我理解为儿子,只在儿子这一级遍历。 看下例子: 复制代码 代码如下:
/** * 本文纯粹是梳理一下目前W3C标准中Array对象的自带Method。 * 全文没啥营养,不过最后性能测试的部分,倒是抛出了一些疑问。 */ 赋值方法 (Mutator methods) 这些方法直接修改数组自身 pop 和 push Array.pop(); // 删除数组最后一个元素,返回被删除的元素 Array.push(element1, ..., elementN); // 在数组尾部插入1-N个元素,返回操作后数组的length 通过这 pop 和 push ,就能把数组模拟成 堆栈(
以下就是JS代码:: @ author YHC: 复制代码 代码如下: function getCurrentMonthLastDay(){ var current=new Date(); var currentMonth=current.getMonth(); var nextMonth=++currentMonth; var nextMonthDayOne =new Date(current.getFullYear(),nextMonth,1); var minusDate=1000*60*60*24
如下 复制代码 代码如下: div/div 用IE开发者工具,或IE8自带的开发者工具。结构如 图1 : 红色所圈之处可以看到给div添加的内联样式width,height,background都依次排列。正常! 但给该div添加filter:alpha(opacity=20)后, 复制代码 代码如下: div /div 情况发生了变化,如 图2 : 红色所圈之处看到,width和filter挤在一行上了。正常的情况width应该另起一行。 有人也许会说这只是开发者工具没有正确显示,只要不影响页面元素正确渲
修正hashtableobj.set("length","0") bug 可以设置key忽略大小写 可以clone hashtable对象 可以 使用obj.valueOf("key","defalutvalue") 设置默认值等等 欢迎修正bug 复制代码 代码如下: html head script type="text/javascript" // Authors Birdshome, 麻袋@博客园 改版 phito,彭海涛 Object.prototype.Clone = function() {
本文记录的是带领成员开发一个小模块功能的时候,需要用到弹出窗口加载树状级联单位选择,最后决定用采用jQuery+EasyUI插件进行开发。但是在使用EasyUI中tree的插件时,碰到了不少麻烦。为了提供弹出树的显示速度,就采用异步加载数节点值,首先先加载根节点,然后根据点击的节点展开加载子节点。 往往结果和预期的都不一样,困惑了几天,展开后子节点是动态加载了,但是收缩后无法清空之前填充的数据;第二次在展开时,子节点又被重复加载了一遍,造成了数据重复显示,并没有提供清除子节点的方法。想尽了各种办法来解决这
代码共享url: http://code.google.com/p/region-select-js/ 数据已经更新到中国统计局网站中的2012年的那批数据(制作后未核对); 下拉使用div模拟实现.可以定制样式 支持ie6/ch/ff/op 按照设计,应该可以支持无限级数据树;但是数据并非随需加载,而是全部加载.如果数据达到街道级别,或是包含国外行政区域,会比较大
本文实例讲述了javascript实时显示北京时间的方法。分享给大家供大家参考。具体如下: 该页面中实时显示北京时间,更改时区也可以作为显示世界时间,代码如下: 复制代码 代码如下: script type="text/javascript" Date.prototype.strftime = function(format){ var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getH
内容导读: 有了 With 语句,在存取对象属性和方法时就不用重复指定参考对象,在 With 语句块中,凡是 JavaScript 不识别的属性和方法都和该语句块指定的对象有关。With 语句的语法格式如下所示: With Object {Statements}对象指明了当语句组中对象缺省时的参考对象,这里我们用较为熟悉的 Document 对象对 With 语句举例。例如 当使用与 Document 对象有关的 write( )或 writeln( )方法时,往往使用如下形式:document.writ