js 定时器setTimeout无法调用局部变量的解决办法_javascript技巧
javascript中定时器setTimeout的用法一般如下,调用beginrotate之后就进入定时执行rotateloop的一个过程,如下代码:
var angle = 0;
function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
function beginrotate() {
//do something
//......
setTimeout("rotateloop()", 100);
}
这段代码有一个问题,就是产生了一个全局变量angle,这显然不是好的编程习惯,所以我们想到使用内嵌函数的方式,将代码改成如下:
function beginrotate() {
var angle = 0;
function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}
这样子改了之后,发现javascript报错了,rotateloop找不到,显然setTimeout没有找到rotateloop这个局部内嵌函数,这里只要稍微改一下就可以解决这个问题了,代码如下:
function beginrotate() {
var angle = 0;
function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
}
只需要将setTimeout的第一个参数改成函数对象,而不是字符串,就可以了。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

C++局部变量和全局变量的区别:可见性:局部变量仅限于定义函数,而全局变量在整个程序中可见。内存分配:局部变量在栈上分配,而全局变量在全局数据区分配。作用域:局部变量在函数内,而全局变量在整个程序中。初始化:局部变量在函数调用时初始化,而全局变量在程序启动时初始化。重新创建:局部变量在每次函数调用时重新创建,而全局变量仅在程序启动时创建。

settimeout和setInterval的区别:1、触发时间,settimeout是一次性的,它在设定延迟时间之后执行一次函数,而setinterval是重复性的,它会以设定的时间间隔重复执行函数;2、执行次数,settimeout只执行一次,而setinterval会一直重复执行,直到被取消。

C++是一种面向对象的编程语言,它的灵活性和强大性通常为程序员提供了很大的帮助。然而,也正是因为其灵活性,编程时难以避免各种小错误。其中一个很常见的错误就是函数返回指针或引用时,不能返回局部变量或临时对象。那么该如何处理这个问题呢?本文将详细介绍相关的内容。问题的原因在C++语言中,局部变量和临时对象是在函数运行期间动态分配的。当函数结束时,这些局部变量和临

Golang是一种强类型编程语言,具有高效、简洁、并发等特点,因此逐渐受到了越来越多的开发者的青睐。而在Golang的开发中,函数的全局变量和局部变量往往会涉及到数据竞争的问题。本文将从实际编码的角度,对Golang函数中全局变量和局部变量的数据竞争问题进行分析。一、全局变量的数据竞争Golang全局变量在所有函数中均可以访问,因此如果不进行严谨的设计和编码

Java10中的局部变量类型推断:如何使用var关键字简化代码导言:在Java10中,引入了局部变量类型推断的特性,通过使用var关键字,可以简化代码编写过程。本文将介绍var关键字的使用方法,并通过示例代码演示其简化代码的效果。一、什么是局部变量类型推断?局部变量类型推断是指在声明局部变量时,可以使用var关键字代替显式的类型声明。编译器会根据赋值表达

Java10中的局部变量类型推断:如何在foreach循环中使用var关键字引言:Java10是继Java9之后的一个重要版本,引入了许多新的特性和改进。其中一个备受期待的特性是局部变量类型推断。在Java10中,我们可以使用var关键字来声明局部变量,并让编译器根据右侧的表达式自动推断变量的类型。在这篇文章中,我们将探讨如何在foreach循环中使

本地变量可以在方法中声明,codeblocks,constructors,等等在Java中。当程序控制进入方法、代码块、构造函数等时,局部变量被创建,当程序控制离开方法、代码块、构造函数等时,局部变量被销毁。在Java中,局部变量没有默认值。这意味着它们可以在变量第一次使用之前被声明和赋值,否则,编译器会抛出错误。示例publicclassLocalVariableTest{ publicvoidprint(){ &am

Java10中的局部变量类型推断:如何在lambda表达式中使用var关键字引言:Java10引入了局部变量类型推断的新特性,这使得我们可以在声明局部变量时使用var关键字来推断其类型。虽然这个特性在大多数情况下可能并不是必需的,但在某些情况下,它可以改善代码的可读性和简洁性。本文将重点讨论在lambda表达式中如何使用var关键字来实现局部变量类型推断
