首页 web前端 js教程 js 定时器setTimeout无法调用局部变量的解决办法_javascript技巧

js 定时器setTimeout无法调用局部变量的解决办法_javascript技巧

May 16, 2016 pm 05:11 PM
settimeout 局部变量

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的第一个参数改成函数对象,而不是字符串,就可以了。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++ 函数的局部变量和全局变量有什么区别? C++ 函数的局部变量和全局变量有什么区别? Apr 19, 2024 pm 03:42 PM

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

settimeout和setinterval有什么区别 settimeout和setinterval有什么区别 Aug 15, 2023 pm 02:06 PM

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

C++语法错误:函数返回指针或引用时,不能返回局部变量或临时对象,应该如何处理? C++语法错误:函数返回指针或引用时,不能返回局部变量或临时对象,应该如何处理? Aug 22, 2023 am 09:22 AM

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

Golang函数的全局变量和局部变量的数据竞争分析 Golang函数的全局变量和局部变量的数据竞争分析 May 21, 2023 am 08:19 AM

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

Java 10中的局部变量类型推断:如何使用var关键字简化代码 Java 10中的局部变量类型推断:如何使用var关键字简化代码 Jul 29, 2023 pm 07:32 PM

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

Java 10中的局部变量类型推断:如何在foreach循环中使用var关键字 Java 10中的局部变量类型推断:如何在foreach循环中使用var关键字 Jul 29, 2023 pm 03:21 PM

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

在Java中,局部变量的默认值是什么? 在Java中,局部变量的默认值是什么? Aug 20, 2023 pm 09:41 PM

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

Java 10中的局部变量类型推断:如何在lambda表达式中使用var关键字 Java 10中的局部变量类型推断:如何在lambda表达式中使用var关键字 Aug 02, 2023 pm 04:25 PM

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

See all articles