gpt4 book ai didi

javascript - JavaScript 中的闭包/回调函数有哪些用例?

转载 作者:行者123 更新时间:2023-12-02 23:37:46 25 4
gpt4 key购买 nike

我正在听 Crockford 关于 JavaScript 闭包的演讲,并且确信信息隐藏的好处,但我对何时使用回调函数没有明确的理解。

这基本上是一个真实的说法,无论有没有回调,一个人都可以完成相同的功能。

作为编写代码的人,在确定何时使用回调/闭包时,我应该牢记哪些启发或提示?

我并不是在寻找笼统的声明“闭包使代码更安全”,而是在寻找回调何时是正确想法的实际示例或经验规则列表。

康乐福的演讲: http://www.yuiblog.com/blog/2010/04/08/video-crockonjs-5/

最佳答案

首先:

  • 回调:作为参数传递给另一个函数的函数,通常在事件发生时被调用。
  • 关闭:保留范围。 IE。这个概念是,当您在另一个函数中声明一个函数时,外部函数的作用域可以在内部函数中访问。

回调也可以是闭包,但并不总是如此。

这是一个回调:

someProcess(myCallback);

function myCallback() {
alert('Done...');
}

function someProcess(callback) {
// does stuff...
// ...
callback();
}

关闭:

function foo(msg) {

function bar() {
// I can access foo's scope
// (i.e. bar can access everything that foo can access)
alert(msg);
}

return bar;

}

foo('hello')(); // alerts "hello"

闭包的一个常见用法是提供信息隐藏,这有助于为语言带来某种封装。看看the module pattern来看看它的实际效果。

另一个常见用法是将事件处理程序绑定(bind)到元素时。例如

var myElements = [ /* DOM Collection */ ];

for (var i = 0; i < 100; ++i) {
myElements[i].onclick = function() {
alert( 'You clicked on: ' + i );
};
}

那是行不通的。单击该元素时,变量 i99。为了使其正常工作,我们可以使用闭包来捕获 i 的值:

function getHandler(n) {
return function() {
alert( 'You clicked on: ' + n );
};
}

for (var i = 0; i < 100; ++i) {
myElements[i].onclick = getHandler(i);
}

关于javascript - JavaScript 中的闭包/回调函数有哪些用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com