【问题标题】:Will Closures protect my vulnerable data from being destroyed?闭包会保护我的易受攻击的数据不被破坏吗?
【发布时间】: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”&lt;div&gt;&lt;p&gt; 标签的当前(混乱)状态,因为这两个 HTML 标签都隐藏在里面的儿童[0] 以上。所以我的“Div_Clone_02”节点不再是原始&lt;div&gt;的克隆;克隆节点与 Display-Div-02 一样混乱。

我没有笨到回到这两个方程并重新计算“Div_Clone_02”节点的值(而“Display-Div-02”标签处于混乱状态。)显然那将是一个错误。但是浏览器在我背后偷偷地重新计算克隆,而我从来没有要求他这样做。

谁能告诉我如何记录我的克隆变量(上面的“Div_Clone_02”)的初始值,然后将初始状态保存在(我敢说吗?)安全空间......它赢了不要被所有试图破坏我完美网页的恶意 JavaScript 例程破坏?

【问题讨论】:

    标签: javascript html closures clone


    【解决方案1】:

    如果我没记错的话,我认为在这种情况下您不需要关闭。 第一件事。闭包基本上是一个位于另一个函数内部的函数。 示例:

    function foo(){
    let array = [1,2,3];
      function printArray(){
      console.log(array);
    }
    printArray();
    }
    

    这样,内部函数现在可以访问外部函数内部的变量。这就是为什么您可以执行 console.log(array) 因为现在您可以访问它 所以现在已经清除了(我希望),存储初始值 你可以使用 localStorage。只需进行谷歌搜索或观看 youtube 视频就可以了

    【讨论】:

    • 感谢您的好意建议,但不幸的是,我认为本地存储方法行不通……尽管不是出于您可能想的原因。
    • 您的计划(我假设)是我应该获取克隆节点,通过 JSON 字符串化运行它,然后将其存储起来以备不时之需。但是让我们跳过存储步骤。作为测试,让我们使用“stringify”转换克隆节点,然后立即使用 JSON“解析器”将其转换回 JavaScript 对象。现在,我们可以修剪掉“Display-Div-02”节点,并移植到 JSON 双重加热版本中。它崩溃和燃烧,但它与本地存储无关。问题是 JSON 翻译软件显然内部不一致。
    • 但为了完整起见,让我们承认“本地存储”人员不保证保存数据的精确副本。存储是免费的,但他们会通过在他们认为合适的任何地方和每个地方添加双引号来破坏一个漂亮的 JSON 字符串,如果你不喜欢它,你会拿回所有的钱。但祝你好运,试图取回你的数据。它已通过 Local Storage 绞肉机。
    • 对不起,我以为你只是想存储一个东西的值,它会被修改,所以它可以被检索
    猜你喜欢
    • 2019-12-31
    • 2017-04-07
    • 1970-01-01
    • 2013-05-30
    • 2021-03-05
    • 2018-04-02
    • 1970-01-01
    • 2011-05-27
    • 2018-11-17
    相关资源
    最近更新 更多