使用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沒有被定義,表明這個屬性已經被刪除了。
究竟是什麼原因,還希望與大家一同探討