【发布时间】:2021-04-03 07:24:33
【问题描述】:
我承认。我不明白闭包。无论我观看了多少视频,或者阅读了哪些解释,它们都在我的脑海中。很尴尬,因为我看到这里的解释后大约有 14,000 人高兴得跳起来:
How do JavaScript closures work?
但尽管我一无所知,但我认为我可能需要闭包来解决我的问题。就是这样:我设置了几个<div> 标签,目的是为了给我一些可以在 JavaScript 例程中克隆的东西。这是我的<div> 结构。这是纯粹的完美。
<div id="Anchor-Div-01">
<div id="Display-Div-02">
<p>This is a Test</p>
</div>
</div>
我创建了几个 HTML 按钮,它们会导致各种 JavaScript 例程故意弄乱段落或“Display-Div-02”标签,我希望能够将它们恢复为原始形式。为此,当最初加载网页时,我使用下面的两个等式克隆原始的“Display-Div-02”节点,然后将其保存在“Div_Clone_02”变量中(如下所示。)
var Temp_Anchor_1 = document.querySelector("#Anchor-Div-01");
var Div_Clone_02 = Temp_Anchor_1.children[0].cloneNode(true);
我还在页面上放置了一个“重置”按钮,将删除乱七八糟的节点,然后将“Div_Clone_02”节点复制到空白处,让一切恢复到最初的完美状态。
不幸的是,我的“Div_Clone_02”变量取决于“id=Display-Div-02”<div> 和 <p> 标签的当前(混乱)状态,因为这两个 HTML 标签都隐藏在里面的儿童[0] 以上。所以我的“Div_Clone_02”节点不再是原始<div>的克隆;克隆节点与 Display-Div-02 一样混乱。
我没有笨到回到这两个方程并重新计算“Div_Clone_02”节点的值(而“Display-Div-02”标签处于混乱状态。)显然那将是一个错误。但是浏览器在我背后偷偷地重新计算克隆,而我从来没有要求他这样做。
谁能告诉我如何记录我的克隆变量(上面的“Div_Clone_02”)的初始值,然后将初始状态保存在(我敢说吗?)安全空间......它赢了不要被所有试图破坏我完美网页的恶意 JavaScript 例程破坏?
【问题讨论】:
标签: javascript html closures clone