为什么';t$(';body';).html(";)清除调用它的javascript吗?

为什么';t$(';body';).html(";)清除调用它的javascript吗?,javascript,jquery,html,function,Javascript,Jquery,Html,Function,这是一段代码,链接到一个javascript文件,该文件生成了一些虚假推文,以及一些试图向自己解释发生了什么的自制评论。我想知道$body.html(“”)的目的是什么是。它似乎只是清除了主体的内容,主体已经是空的,除了存在的javascript。这不也会清除体内的实际脚本吗?i、 例如,当我们到达那一行时,为什么整个脚本不消失呢。我猜函数是在主体被清除之前完整执行的?我想,只是想对函数执行有一点启发 <!DOCTYPE html> <html> <head>

这是一段代码,链接到一个javascript文件,该文件生成了一些虚假推文,以及一些试图向自己解释发生了什么的自制评论。我想知道
$body.html(“”)的目的是什么是。它似乎只是清除了主体的内容,主体已经是空的,除了存在的javascript。这不也会清除体内的实际脚本吗?i、 例如,当我们到达那一行时,为什么整个脚本不消失呢。我猜函数是在主体被清除之前完整执行的?我想,只是想对函数执行有一点启发

<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script src="data_generator.js"></script>
</head>
<body>
 <script>


  $(document).ready(function(){   // calls function only after dom is loaded                        
    var $body = $('body');        // selects html body tag, stores in $body
    $body.html('');               // clears body?

    var index = streams.home.length - 1;   // sets index to length of streams array
    while(index >= 0){
      var tweet = streams.home[index];     // gets a tweet string
      var $tweet = $('<div></div>');       // $tweet is a div element
      $tweet.text('@' + tweet.user + ': ' + tweet.message);  // add formatted tweet to div
      $tweet.appendTo($body);             // add tweet to body
      index -= 1;                         // rinse, repeat
    }

  });

 </script>
</body>
</html>

$(document).ready(function(){//仅在加载dom后调用函数
var$body=$('body');//选择html body标记,存储在$body中
$body.html(“”);//是否清除正文?
var index=streams.home.length-1;//将索引设置为streams数组的长度
而(索引>=0){
var tweet=streams.home[index];//获取一个tweet字符串
var$tweet=$('');//$tweet是一个div元素
$tweet.text(“@”+tweet.user+”:“+tweet.message);//将格式化的tweet添加到div
$tweet.appendTo($body);//将tweet添加到body
索引-=1;//冲洗,重复
}
});

编辑:要清楚,我没有写代码,只有注释。我只是想把它分解并理解每一行。

当Javascript运行时,函数上下文存储在内存中,关闭变量存储在上下文中。它们不会消失。全局变量附加到
窗口
。它们也不会消失。

我认为将脚本附加到标题(所有其他脚本所在的位置)比附加到正文更好。

如果要完全消除正在调用的脚本,可以使用:

<script>
(function foo(){
    var b=function moo(){
        var c=document.getElementsByTagName('script');
        alert(document.body.innerHTML);
        c[0].parentElement.removeChild(c[0]);
        alert(document.body.innerHTML);
    }
    var a=setTimeout(b,1000);
    b=null;
})();
foo=null;
</script>

(函数foo(){
var b=函数moo(){
var c=document.getElementsByTagName('script');
警报(document.body.innerHTML);
c[0].parentElement.removeChild(c[0]);
警报(document.body.innerHTML);
}
var a=设置超时(b,1000);
b=零;
})();
foo=null;
请记住,这将完全删除
脚本的任何功能以及
DOM中对它的任何引用

基本上,因为脚本已经加载,所以不能从
DOM
中删除它


现在它已经加载了,真的有什么理由去掉它吗…?

因为它已经加载到内存中了。HTML中的脚本元素应该消失,但是脚本加载到内存中,修改HTML后不会将其从内存中删除。谢谢@PatrickEvans。包含该行的目的只是为了清除脚本吗?这是一种常见的做法吗?我认为在发布推特之前,只需确保身体没有受到过量元素的污染,但这只是一个猜测。虽然如果他们只是将其作为外部js文件包含并将脚本标记放在头部,他们就不需要清除正文。好的,谢谢!我想可能是这样的。我想他们只是为了简单起见把它放在html文件中,但我明白你的意思。谢谢。我不是想消除脚本,我只是想知道为什么它没有通过代码消除。我只是不明白这行的目的,$body.html(“”);是的,这是一个记忆问题。您的浏览器已经下载了脚本,因此尽管您试图从
HTML
中清空脚本,它仍然可以调用。