- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图对闭包有一个透彻的理解,但我正在为它的机制而苦苦挣扎。我看过 w3schools ( https://www.w3schools.com/js/js_function_closures.asp ) 和 MDN ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures ) 和其他一些地方。我了解闭包是什么以及如何使其工作,但我不明白为什么在第一次调用外部函数后的后续调用似乎直接进入内部函数。
这是我的代码 - 一个简单的工作闭包:
var add = (function () {
var a = 0;
alert('hi');
function addInner(){
a += 1;
return a;
}
return addInner;
})();
function getAdd() {
document.getElementById("test").innerHTML = add();
}
我有两个问题可能都有相同的答案:为什么每次调用 add()
时 a
都不会重置?为什么除了第一次之外不会弹出警报?我将 getAdd()
附加到一个按钮,效果很好,但它不会在第一次弹出警报时弹出。为什么要这样做?
编辑:我还发现这个问题的第一个答案 ( Why Don't Variables Reset in a Closure (Javascript)) 非常有帮助。
最佳答案
add
是对 addInner
的引用,而不是匿名“outer”函数,因为“outer”函数返回 addInner
。然后,您调用该匿名函数一次 - 最后一组 ()
- 并将生成的函数及其自己的私有(private)“a”存储在 add
中。
假设外部函数是一个名为constructAdder
的命名函数,而您调用了
var add = constructAdder();
var add2 = constructAdder();
这基本上就是您所做的,但是使用了一个匿名函数,如果这样更清楚的话。由于闭包的魔力,您有一个外部函数构造一个可以计数的内部函数。
关于javascript - 在闭包中,为什么每次调用 main 变量都不会重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738590/
我在一个简单的 GTK 应用程序中有两个小部件: extern crate gdk; extern crate gtk; use super::desktop_entry::DesktopEntry;
我想做这样的事情: const vegetableColors = {corn: 'yellow', peas: 'green'}; const {*} = vegetableColors; cons
该属性它存储在 gradle 中的什么位置? subprojects { println it.class.name // DefaultProject_Decorated depen
我想在 jQuery 闭包中看到窗口属性“otherName”描述符。但 进入 jQuery 闭包 'otherName' 描述符显示未定义,我认为可能 是 getOwnPropertyDescrip
我曾经看过 Douglas Crockford 的一次演讲,在 javascript 的上下文中,他提到将 secret 存储在闭包中可能很有用。 我想这可以在 Java 中像这样天真地实现: pub
我很难理解 Swift 中闭包中真正发生的事情,希望有人能帮助我理解。 class MyClass { func printWhatever(words: String) {
我有两个 3 表:用户、个人资料、friend_request $my_profile_id变量存储用户个人资料ID的值 $my_user_id = Auth::user()->id; $my_pro
我正在尝试通过使用 GLFW 的包装来学习 Swift GLFW 允许添加错误回调: GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cb
我是一名优秀的程序员,十分优秀!