setInterval()之坑

2023-05-16

首先看下面这个例子:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>setInterval()之坑</title>
</head>
<body>
	<script type="text/javascript">
	  (function(){
	  	var arr=[1,2,3,4,5,6];
	  	var i=0;
	  	var timer=setInterval("printNumber()",2000);
	  	function printNumber(){
	  		console.log(arr[i]);
	  		i++;
	  		if(i==arr.length) clearInterval(timer);
	  	}
	  })();
	</script>
</body>
</html>

很容易分析得出,这段代码的作用是每隔2秒输出arr数组里的元素。然而,真的可以输出吗???

我们先测试一下,如下图:


发现竟然报错了,明明定义了这个函数的啊!这是怎么回事呢?

追本溯源,原来这个定时器位于一个块级作用域里,如果第一个参数写成 "printNumber()" 这样的形式,注意有双引号,那么就会去调用window对象下的这个方法,而我们申明的printNumber()函数由于在块级作用域里,故不属于window的方法,所以就会找不到,就报错了!!!

那么怎么改呢?很简单,只需要写一个函数名就行了,也就是printNumber, 改成:setInterval(printNumber,2000);

或者直接改成下面的也可以:

<script type="text/javascript">
var arr=[1,2,3,4,5,6];
var i=0;
var timer=setInterval("printNumber()",2000);
function printNumber(){
	console.log(arr[i]);
	i++;
	if(i==arr.length) clearInterval(timer);
}
</script>

这样,声明的printNumber函数就是window的一个方法了~~


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setInterval()之坑 的相关文章

  • setInterval()之坑

    首先看下面这个例子 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title gt
  • 使用setInterval遇到的陷阱

    setInterval的使用 span class token keyword const span interval span class token operator 61 span span class token function
  • javascript 中 setInterval 函数的闭包

    如何使用setInterval不使用全局变量 我更喜欢将 setInerval 调用的函数的所有变量包装在某种闭包中 如下所示 var wrap function f var local1 local2 return function re
  • setInterval 是否占用 CPU 资源?

    我在某处读到 setInterval 是 CPU 密集型的 我创建了一个使用 setInterval 的脚本并监视 CPU 使用情况 但没有注意到变化 我想知道是否有什么我错过的事情 该代码的作用是每 100 毫秒检查 URL 中的哈希值
  • JavaScript 专家请注意:需要 setInterval() 方面的帮助

    我正在尝试为房地产商店橱窗制作非交互式展示 我已经有一段时间没玩了setInterval 我的脚本第一次执行时 一切都很好 但是当它尝试通过以下方式获取下一个属性时getNextProperty 它开始变得混乱 如果您有 Firebug 或
  • Javascript 会话超时并带有多个选项卡的弹出警报

    我正在使用 javascript setInterval 来检查用户空闲时间并在自动注销之前显示弹出警报 但它不适用于多个选项卡 适用于单个选项卡 以下是我的代码 localStorage removeItem idleTimeValue
  • JavaScript:使用 window.setTimeout 触发 CSS 转换

    这 显然 是一个更大项目的一部分 但我正在尝试触发 CS 转换setTimeout 我知道如何使用 CSS 动画 但这不仅仅是重复的过渡 当属性更改时 将发生 CSS 转换 为了我自己的目的 我使用setAttribute因为这将行为与其他
  • JavaScript 中 0 毫秒的 setInterval() 行为

    在我的应用程序中 我发现一些 JavaScript 代码正在使用setInterval0 毫秒 如下所示 self setInterval myFunction 0 显然 这对我来说似乎不是一个好主意 谁能告诉我将会有什么行为setInte
  • 我的脚本运行时是否调用了 setInterval 处理程序?

    我计划使用 setInterval 简单地将一个变量设置为 false 主循环将检查该变量以停止 示例 注意 这只是一个示例 实际代码不是易于重构的 while 循环 而是实际上由闭源软件生成的相当复杂且执行时间较长的脚本 var runn
  • setInterval 在 Chrome 上无法正常工作

    我有一个定制的幻灯片对象来执行名称在网站上指示的常见操作 一切正常 除非我在 Chrome 中切换选项卡并返回网站选项卡 当这种情况发生时 幻灯片就会变得疯狂并开始淡化图像 而不管setInterval给定的间隔 找不到与此相关的任何内容
  • setInterval 在非活动选项卡上不会减慢速度

    这可能与一个非常常见的问题相反 当您使用setInterval在一个选项卡上切换到另一个选项卡时 间隔会显着缩短 即减慢 这对于音频计时来说非常明显 因为您可以听到它被减慢的声音 但在最新的 Chrome 56 和 Firefox 51 上
  • 了解 JavaScript setTimeout 和 setInterval

    我需要一些帮助来理解和学习如何控制这些功能来完成我想要它们做的事情 基本上 我有 Java 背景 并通过 Pong 游戏 项目深入研究 JavaScript 我已经设法通过 setInteval 每 20 毫秒调用我的主游戏循环来运行游戏
  • 动态更改 setInterval 值

    我想动态更改 setInterval 的间隔值 由于 setInterval 回调函数中存在循环 我正在苦苦挣扎 我在stackoverflow上看到了太多问题 但没有任何解决方案可以帮助我 如果有人知道答案 请举例说明 谢谢 这是我的代码
  • 如何在Javascript中延迟setInterval?

    我现在在 JavaScript 中反复遇到一个奇怪的问题 我似乎无法拖延setInterval longer 发生情况的一个小例子 var loop var count loop setInterval start 30 function
  • setInterval 不适用于 ajax 调用

    我对网络服务进行了 getJson 调用并且工作正常 现在我尝试每 10 秒发出一次请求 使用带有回调函数的 setInterval 来触发弹出警报 我无法让它发挥作用 这是代码 function ajxCall getJSON http
  • 使用 React 定期运行 fetch

    我有一个包含不同反应组件的网格 所有组件都是独立的 因为它们获取自己的数据并显示它 我想以某种方式让它们每 15 分钟自动重新获取和更新一次 我的第一个想法是 HOC 但是随着更新的钩子和功能组件的出现 我尝试了一些使用钩子的东西 所以我已
  • 使用 Javascript 使用计时器更改背景颜色和文本颜色

    我正在尝试使用计时器更改表格及其所有单元格的背景和文本颜色 我在结束标记之前有下面的脚本 背景是唯一改变的 表的 ID 是 titleTable 谢谢
  • Angular.js - 使用间隔应用过滤器

    我正在对日期时间对象使用自定义 angular js 过滤器 function relativeTimeFilter return function dateObj return getRelativeDateTimeString date
  • 使用 Firefox 打开确认对话框时显示“$apply already in Progress”

    我 有时 变得很奇怪 申请已在进行中在以下看似无辜的情况下打开确认对话框时出错 var mod angular module app mod controller ctrl function scope interval http scop
  • Safari 在后台选项卡中延迟 setInterval / setTimeout(间隔 > 1000ms)

    请注意 当页面位于后台选项卡中时 Safari 10 0 3 会延迟我的代码 var interval 2000 var scriptTime new Date getTime function addTime scriptTime int

随机推荐

  • 解决同一局域网下不同网段能ping通但是ssh不上服务器的情况

    一 xff1a 问题描述 xff1a 在公司的局域网网络环境下有四个ip网段 xff0c 分别是192 168 1 0 2 0 3 0 5 0 xff0c 服务器用的是5 0网段的 xff0c 而个人电脑用的则是1 0网段的 xff0c 在
  • STM32单片机电源端并联电容的重要性

    如图 xff0c 笔者用TQFP 32 100PIN 0 55MM转直插的转接板焊了一个STM32F207VET6的板子 板上引出了SWD调试接口 xff08 仅占用PA13和PA14 xff09 xff0c USART1串口引脚 xff0
  • Linux信号量常用操作表

    以下函数失败时均返回 1 xff0c 所在头文件为 include lt sys sem h gt 创建用于区分信号量的键值key xff1a key t key 61 ftok 34 foo bar 34 39 a 39 xff0c 第一
  • 一文加强对React的记忆(2021 年 6 月更新),收藏再也不用查看文档、教程了

    我不经常使用 React xff0c 所以每当我需要在 React 中做最小的事情时 xff0c 我都必须查看文档 教程或在论坛上发布问题 这就是我决定做这个记忆辅助工具的原因 xff0c 鉴于我的记忆力不是那么好 xff0c 我想为什么不
  • 13.实现鼠标中断处理

    简介 上节实现了对键盘中断服务子程序的处理和修改优化了中断程序 xff0c 但只是简单的在中断服务子程序中记录断码或通码 xff0c 缓冲区使用效率不高 目标 实现鼠标中断处理 优化中断缓存 pc中8259A中断控制器连接模型如下 1 鼠标
  • 【Linux】在Linux上安装VNC

    有幸能够亲自在服务器上面操作一下 xff0c 这篇博客来说一说 xff0c 如何在Linux上安装VNC 首先要知道的是 xff0c VNC是什么 VNC xff08 Virtual Network Computing xff09 xff0
  • win10开启自带的手机投屏功能方式

    本篇文章主要讲解win10开启自带的手机投屏方式 日期 xff1a 2023年1月15日 作者 xff1a 任聪聪 开启后效果 点击连接 打开连接或通过手机其他网络进行连接 连接步骤 xff1a 步骤一 打开手机端的wifi网络设置 xff
  • TensorFlow学习(三):tf.scatter_nd函数

    scatter nd indices updates shape name 61 None 根据indices将updates散布到新的 xff08 初始为零 xff09 张量 根据索引对给定shape的零张量中的单个值或切片应用稀疏upd
  • text to image(八):《Image Generation from Scene Graphs》

    最近在翻阅文本生成图像的相关工作 xff0c 目前比较新的有突破性的工作是李飞飞工作团队18年cvpr发表的 Image Generation from Scene Graphs 论文地址 xff1a https arxiv org abs
  • text to image(四):《Stackgan》

    继续介绍文本生成图像的相关工作 xff0c 本文给出的是2016年12月10日发表于 arXiv 的文章 Stackgan Text to photo realistic image synthesis with stacked gener
  • text to image(六):《AttnGAN》

    继续介绍文本生成图像的工作 xff0c 本文给出的是CVPR 2018 的文章 AttnGAN Fine Grained Text to Image Generation with Attentional Generative Advers
  • image caption笔记(二):《Show and Tell : A Neural Image Caption Generator》

    一 基本思想 CNN 43 RNN CNN用的是VGG16 RNN部分用的是LSTM 换成resnet101效果会更好 二 模型结构 四 代码分析 xff1a 首先是训练的部分 xff08 1 xff09 准备数据 COCO数据集中的cap
  • L1惩罚项和L2惩罚项

    x即为参数 L2正则化参数 从公式5可以看到 xff0c 越大 xff0c j j衰减得越快 另一个理解可以参考图2 xff0c 越大 xff0c L2圆的半径越小 xff0c 最后求得代价函数最值时各参数也会变得很小
  • COCO数据集介绍

    转载自 xff1a https zhuanlan zhihu com p 29393415 COCO的 全称是Common Objects in COntext xff0c 是微软团队提供的一个可以用来进行图像识别的数据集 MS COCO数
  • image caption笔记(九):《Unsupervised Image Captioning》

    无监督的caption 文章使用一个图像数据集 xff08 MSCOCO xff09 和一个文本语料库 xff08 从Web上抓取的200多万个句子组成图像描述语料库 xff09 来做无监督caption 没有任何配对集合 1 模型结构 x
  • PyTorch中使用指定的GPU

    转载自 http www cnblogs com darkknightzh p 6836568 html PyTorch默认使用从0开始的GPU xff0c 如果GPU0正在运行程序 xff0c 需要指定其他GPU 有如下两种方法来指定需要
  • 七大主流排序算法时间效率比较(基于C语言)

    这段时间在温故一些常见的排序算法 xff0c 顺手便把常见的一些比较著名的排序算法对同一个目标样本做了个比较 样本存于文件中 xff0c 可以根据需要进行替换 我调试的数据量较小 xff0c 发现简单算法 xff08 冒泡 xff0c 选择
  • image caption笔记(十):一些实现过程中的小细节

    1 beam search 一方面可以提升指标 xff0c 另一方面也可以解决生成的句子不通顺的问题 因此 xff0c 不管是在训练测试的过程中都要开beamsearch xff0c 对提高指标有帮助 还有就是 xff0c 如果训练的时候
  • C# 多进程之间的通讯方式

    前言 C 中可能大多数人针对于多线程之间的通讯 xff0c 是熟能生巧 xff0c 对于AsyncLocal 和ThreadLocal以及各个静态类中支持线程之间传递的GetData和SetData方法都是信手拈来 xff0c 那多进程通讯
  • setInterval()之坑

    首先看下面这个例子 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title gt