js 函数内部创建的setTimeout调用自身函数

js 函数内部创建的计时器setTimeout调用自身函数,实际上就变成了setInterval,操作不当的话会导致计时器不断在创建

在本函数内部清除计时器的时候带上 return ;

例如:

<script type="text/javascript">

    var t=3,timer;

    function sleep(){

        if(t<=0){

            clearTimeout(timer);

            alert("over");

            //一定要return,不然下面又创建了新的定时器

            return;

        }

        alert("hello");

        t--;

        timer = setTimeout("sleep()", 1000);

    }

    sleep();

</script>

时间: 2024-10-10 23:19:51

js 函数内部创建的setTimeout调用自身函数的相关文章

函数内部用setTimeout()调用自身函数相当于setInterval()

本来setTimeout(function(){},time)只执行了一次function,但是当 function demo() { alert(1); setTimeout('demo()' ,500);} 此时每隔0.5秒就会alert,但是我就觉得奇怪,因为setTimeout()本来就是只执行一次而已,为什么会一直不断的出现呢?感觉好像setInterval(): 后来才发现原来他是调用了自身的函数,所以是一直嵌套自身函数,才会这样一直循环. 如果改成这样, function demo

272 函数的理解和使用:回调函数,匿名函数自调用IIFE,**函数中的this**

什么是函数? 用来实现特定功能的, n条语句的封装体 只有函数类型的数据是可以执行的, 其它的都不可以 为什么要用函数? 提高复用性 便于阅读交流 函数也是对象 instanceof Object===true 函数有属性: prototype 函数有方法: call()/apply() 可以添加新的属性/方法 函数的3种不同角色 一般函数 : 直接调用 构造函数 : 通过new调用 对象 : 通过.调用内部的属性/方法 函数中的this 显式指定谁: obj.xxx() 通过call/appl

第163天:js面向对象-对象创建方式总结

面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. 1 var obj = {}; 2 //对象有自己的 属性 和 行为 3 // 属性比如: 年龄.姓名.性别 4 // 行为: 吃饭.睡觉.走路.讲课等... 动作 5 var obj2 = { 6 name: 'laoma', 7 age: 18, 8 sayHi: function(){ 9 console.log( name + 'say hi' )

[Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用

eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函数很难高效地调用任何一个函数,因为一旦调用的函数是eval函数,那么每个函数调用都需要确保在运行时整个作用域对eval函数是可访问的.语言标准演化出辨别两种不同的调用eval的方法.第一种方式:函数调用涉及eval标识符,被认为是一种“直接”调用eval函数的方式.编译器需要确保被执行的程序具有完全

C中调用Lua函数

我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglobal(L, "f"); // 获取lua函数f lua_pushnumber(L, x); // 压入参数x和y lua_pushnumber(L, y); if(lua_pcall(L, 2, 1, 0) != 0) error(L, "error running functi

C# 互操作性入门系列(二):使用平台调用调用Win32 函数

好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------------------------------------------------------------------- C#互操作系列文章: C#互操作性入门系列(一):C#中互操作性介绍 C#互操作性入门系列(二):使用平台调用调用Win32 函数 C#互操作性入门系列(三):平台调用中的数据封

立即调用的函数表达式(IIFE)

在JavaScript中,圆括号 () 是一种运算符,跟在函数名之后,表示调用该函数.比如, print() 就表示调用 print 函数. 有时,我们需要在定义行数之后,立即调用该函数.这时,你不能在函数的定义之后加上圆括号,这会产生语法错误. function(){/* code */}; // SyntaxError: Unexpected token ( 产生这个错误的原因是, function 这个关键字即可以当做语句,也可以当作表达式. //语句 function f(){} //表

Android使用JNI(从java调用本地函数)

当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本地函数. 在Java端,开发者所需要做的仅仅是在连接本地函数的方法之前加上native关键字.这样VM就会去寻找这个本地函数. 1.从Java调用本地函数 从Java调用本地函数时,需要在类中定义一个带有native关键字的特有方法,作为连接本地代码的桥梁.通过这个定义,尝试调用本地方法时JVM会找

Lua调用C函数的实现

看Lua有一段时间了,说实话进展挺慢的.归根到底是因为"动机不纯",我确实不是抱着学Lua的心态去看资料的.本来看Lua就是听说Lua的实现比较简单,可以借Lua理解解释性语言的一些细节实现.当然Lua也确实不简单的,闭包什么的概念以前都没听说过.没用过Lua却去硬啃Lua语言实现,我也是蛮拼的! 我主要的参考资料是云风大神的<Lua源码赏析>和高手翻译的<LUA中文教程>.这里我想记录一下函数调用的过程.按照函数调用这条线串联一下各各知识点.首先要从字节码开始