javascript - 即使整个脚本从 html 页面中删除后,setInterval 仍会继续运行

标签 javascript jquery append google-chrome-devtools setinterval

我创建了一个自定义函数来复制 setInterval 函数。 这是我正在尝试做的事情:

<html>
   <head>
       <script id='scpt_a'>
            //custom setInterval function

     function interval(func,ti){

      try{
         func.call(null);
         }
       catch(err){
          throw new Error(err.toString());
         }
       setTimeout(()=>{interval(func,ti); },ti);
         }

       //custom setinterval function end

      $('#start).click(()=>{
          $('body').append("<script id='scpt_b'>interval(()=> 
          {console.log('hello');},10000);</script>");
       });

      $('#stop).click(()=>{
            $('#scpt_a').remove();
            $('#scpt_b').remove();
       });


       </script>
   </head>
   <body>
      <button id='start'>start</button>
       <button id='stop'>stop</button>
   </body>
</html>

每当我运行此代码时,它都可以正常工作,即当我单击开始按钮时,它会 append 代码,以便代码执行它并继续打印hello 。现在,当我按下停止按钮时,它删除 append 脚本以及初始(非 append )脚本 。因此,由于脚本不存在,因此它应该停止执行,但它没有发生。

我使用chrome开发工具,我看到点击停止按钮没有脚本( append 脚本后HTML 文档中存在),但控制台上仍然打印 hello

请帮我弄清楚为什么会发生这种情况以及如何解决这个问题。

最佳答案

当您向页面添加一些脚本时,浏览器会解析它。当您稍后删除脚本标记时,没关系,脚本已经被解析和处理,并且位于浏览器内存中。因此,尽管您从页面中删除了脚本标记,您的 interval 函数仍将继续运行。

这是这个事实的例证。我添加了对 jQuery 的引用,请参阅第一个警报,然后将其删除,然后删除 jQuery 脚本标记,您可以看到我仍然可以使用 jQuery $ 函数:

<script id="s1" src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script>
	alert($);
  $("#s1").remove();
  alert($);
</script>

关于javascript - 即使整个脚本从 html 页面中删除后,setInterval 仍会继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035419/

相关文章:

prolog - 了解 append 语法

javascript - 为什么我的图像不能在 Vue.js 2 中加载?

javascript - node js中response.send和response.write的区别

php - JQuery 数据表和减慢数据显示速度

javascript - 如何仅切换翻转类(class)旁边的面板

javascript - jQuery append 后没有图像尺寸

python - 在 Python 中 append 关联数组

javascript - 使用 jQuery 和 jQuery Radmenu 插件的圆形菜单

javascript - 绘图软刷

javascript - 如何使用 jquery 获取 var 中下拉列表的所有值?