搜尋
首頁web前端js教程js 定時器setTimeout無法呼叫局部變數的解決方法_javascript技巧

javascript中定時器setTimeout的用法一般如下,調用beginrotate之後就進入定時執行rotateloop的一個過程,如下代碼:

複製代碼 程式碼如下:

var angle = 0;

function rotateloop() {
if (angle angle ;
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 ;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}

這樣子改了之後,發現javascript報錯了,rotateloop找不到,顯然setTimeout沒有找到rotateloop這個局部內嵌函數,這裡只要稍微改一下就可以解決這個問題了,程式碼如下: 複製程式碼
程式碼如下:


function beginrotate() {

var angle = 0;

var angle = 0;
function rotatel {
if (angle angle ;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
} 只需要將setTimeout的第一個參數改成函數對象,而不是字串,就可以了。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C++ 函数的局部变量和全局变量有什么区别?C++ 函数的局部变量和全局变量有什么区别?Apr 19, 2024 pm 03:42 PM

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

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

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

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

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

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

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

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

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

setTimeout()和setInterval()在JavaScript中有什么区别?setTimeout()和setInterval()在JavaScript中有什么区别?Sep 01, 2023 pm 03:01 PM

setTimeout(function,duration)-该函数在duration毫秒后调用函数。这适用于一次执行。让我们看一个例子-它等待2000毫秒,然后运行回调函数alert(‘Hello’)-setTimeout(function(){alert('Hello');},2000);setInterval(function,uration)-此函数在每duration毫秒后调用function。这可以无限次进行。让我们看一个例子-它每2000毫秒触发一次警

Java 10中的局部变量类型推断:如何在switch语句中使用final var关键字Java 10中的局部变量类型推断:如何在switch语句中使用final var关键字Jul 31, 2023 pm 12:31 PM

Java10中的局部变量类型推断:如何在switch语句中使用finalvar关键字随着Java语言的不断发展,每个新版本都会引入一些新的特性和改进。在Java10中,其中一个重要的新特性是局部变量类型推断。这个特性使得开发人员可以使用var关键字来代替显式的类型声明,从而使代码更加精简和易读。本文将探讨如何在switch语句中使用finalvar关

在JavaScript中使用clearTimeout函数取消setTimeout的计时器在JavaScript中使用clearTimeout函数取消setTimeout的计时器Nov 18, 2023 am 08:05 AM

在JavaScript中使用clearTimeout函数取消setTimeout的计时器,需要具体代码示例在JavaScript中,setTimeout函数是用来在指定的时间延迟后执行一次特定的代码。而setInterval函数则是用来在指定的时间间隔内重复执行一段特定的代码。然而,在某些情况下,我们可能需要在定时器执行之前取消它。在这种情况下,就可以使用c

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器