当使用回调函数时,JavaScript如何从不再在DOM中的iframe访问元素?

How does JavaScript access elements from a iframe that is no longer in the DOM when using a callback function?

本文关键字:DOM 不再 中的 iframe 元素 访问 回调 函数 JavaScript      更新时间:2023-09-26

我不知道用语言来解释这个问题的最好方式,所以这里是我的问题的一个例子:http://jsfiddle.net/efZyt/

(iframe源代码在这里:http://jsfiddle.net/H6rLQ/)

  1. 点击"更改源"按钮。
  2. 重复几次
  3. 点击"重复文本"按钮。

你会收到一个提醒,它会把你每一步输入的文本读给你。

我有点困惑如何回调函数

function(){ alert($('#getSomeText').val()); }

在文本值存在之前被加载到回调数组中,该函数在值不再存在(或者更确切地说,存在于我找不到的地方)之后被调用,但它能够产生所有的值。

我不知道在哪里值被保存回调访问它们。iframe的整个实例是否作为闭包上下文保存在某个地方供回调运行或其他什么?

这就是JavaScript的魅力所在。值并没有像您想象的那样存储在任何地方!这就是"闭包"的神奇之处。

闭包的基本概念是,即使在它的作用域结束后,变量仍然存在。

例如:

function outerFunction() {
 innerVar = function innerFunction() {
  alert('hello');
 }
 return innerVar;
}
var outterVar = outerFunction();
outterVar();

上面将输出'hello'。注意,outerFunction已经执行完毕,'innerVar'的作用域也结束了;然而,有趣的是,我们仍然可以执行外部函数中定义的函数。

同样,当你将一个函数传递给父函数时。寄存器,你没有传递由'val()'获得的实际值;你正在传递一个函数,该函数稍后将被执行,并在内部充当闭包。

当它被执行时,它会使用'val()'来获取'closure'函数中存在的元素的值。