使用delete刪除var聲明的變量

使用delete刪除var聲明的變量

文章的標題的確讓人感到難以置信,甚至在《javascript權威指南(第6版)》第5章5.3.1中直截了當的寫到:

var聲明的變量是無法通過delete刪除的

但面對錯綜複雜的情況,事實真的是這樣嗎?
我們將使用下面的代碼(test.html)作爲演示代碼:

<button id="test">test</button>
<script>
    var index="hello world";

    var testButton = document.getElementById("test");
    testButton.addEventListener('click',function(){
        alert(index);
    });
</script>

我們定義了一個button併爲之綁定了一個事件,點擊它可以彈出全局變量index的值

正常情況下delete的確沒辦法刪除var 聲明的變量

我們運行程序,打開控制檯,輸入delete index ,按下回車,控制檯會提示我們無法刪除它。點擊test照樣會彈出hello world
這裏寫圖片描述

但在服務器環境下(比如Tomcat),這個法則就被破壞了

下面的代碼講述了一個頁面(test2.html)在服務器上通過ajax請求來獲得上面test.html的內容並把獲取到的數據按照html格式添加到本頁面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用delete刪除var聲明的變量</title>
    <script src="../jquery-1.12.0.min.js"></script>
</head>
<body>
<div id="container">
</div>
<script>
    $.get("test.html",null,function(data){
        $("#container").html(data);
    });
</script>
</body>
</html>

我們編碼完成後,把包含下面代碼的文件和test.html放在同一文件夾下並一起放到Tomcat上。
test2.html運行結果如圖所示:
這裏寫圖片描述
點擊test,仍然會彈出“hello world”字樣。但請注意,這時,我們打開控制檯,輸入delete index並按下回車 , 控制檯給我們的提示竟然是true!
這裏寫圖片描述
我們再點擊test按鈕,發現程序報錯,說index沒有被定義,表明這個屬性已經被刪除了。
這裏寫圖片描述
究竟是什麼原因,還希望與大家一同探討

發佈了42 篇原創文章 · 獲贊 67 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章