javascript - 对 JavaScript 中的闭包感到困惑

标签 javascript closures

Possible Duplicate:
How do JavaScript closures work?
Javascript closures and side effects in plain English? (separately)

我是 JavaScript 新手,但我对闭包的工作原理感到非常困惑。有人可以通俗地解释一下它们是什么或者为什么它们有用吗?

最佳答案

闭包类似于函数定义时的上下文。每当定义函数时,都会存储上下文,即使函数的“正常”生命周期结束,如果您保留对函数执行中定义的元素的引用,它仍然可以访问上下文的元素(闭包),这实际上是函数定义中的范围。抱歉我的英语不好,但这个例子可能会让你理解:

function test() {
  var a = "hello world";
  var checkValue = function() { alert(a); };
  checkValue();
  a = "hi again";
  return checkValue;
}

var pointerToCheckValue = test();  //it will print "hello world" and a closure will be created with the context where the checkValue function was defined.
pointerToCheckValue(); //it will execute the function checkValue with the context (closure) used when it was defined, so it still has access to the "a" variable

希望有帮助:-)

关于javascript - 对 JavaScript 中的闭包感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8171959/

相关文章:

JavaScript - 如何检查输出是否具有相同的值

javascript - Scala 中的闭包如何工作?

java - Java 8的回调机制

python - 获取闭包的父函数

javascript - setTimeout 如何查看模块内的私有(private)函数?

javascript - 从函数访问 JavaScript 对象变量

javascript - 是否可以将加法和减法合并为一个函数?

javascript - 如何在 Javascript 中按值(而不是引用)保存所选元素的 Node ?

javascript - 无法理解 console.log 中带/不带闭包的函数行为

javascript - 如何从javascript设置表单的默认按钮?