javascript createAdder函数功能与使用说明

时间:2024-07-30 02:47:35 

英文原文
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));



演示代码:

<script> 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)+ '<br>'); document.write('-10 + 4 is ' + addFour(-10)); </script>


标签:createAdder
0
投稿

猜你喜欢

  • TensorFlow2.0使用keras训练模型的实现

    2023-08-30 09:25:49
  • Python中pip安装非PyPI官网第三方库的方法

    2021-01-20 15:51:18
  • 如何从SQL数据库中调用图片?

    2009-11-15 19:59:00
  • python:解析requests返回的response(json格式)说明

    2023-11-05 15:43:25
  • Python 使用requests模块发送GET和POST请求的实现代码

    2023-07-19 23:19:27
  • MySQL跨服务器数据映射的实现

    2024-01-23 15:08:19
  • 一文理解Python命名机制

    2021-11-22 08:04:04
  • 使用python实现数组、链表、队列、栈的方法

    2021-01-03 22:40:20
  • python实现将列表中各个值快速赋值给多个变量

    2023-11-23 18:02:05
  • mysql一对多关联查询分页错误问题的解决方法

    2024-01-28 05:18:44
  • 详解如何利用docker快速构建MySQL主从复制环境

    2024-01-25 08:25:33
  • PHP版微信小店接口开发实例

    2023-11-10 11:56:06
  • pytorch交叉熵损失函数的weight参数的使用

    2021-02-27 15:52:31
  • Python 写入训练日志文件并控制台输出解析

    2021-10-11 01:27:10
  • python引入requests报错could not be resolved解决方案

    2022-08-28 08:24:45
  • Python列表生成式与生成器操作示例

    2023-08-05 14:16:45
  • Python文件操作之合并文本文件内容示例代码

    2021-06-24 13:58:05
  • 一文带你吃透Python中的日期时间模块

    2023-01-11 19:33:32
  • 如何使用Python抓取网页tag操作

    2023-11-11 12:15:24
  • 大容量csv快速内导入sqlserver的解决方法(推荐)

    2024-01-13 00:44:12
  • asp之家 网络编程 m.aspxhome.com