时间:2021-05-26
递归:是一个函数通过调用自身的情况下构成的;
首先上个例子:
Function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); }}这是一个经典的递归阶乘函数,但是在js中这么调用可能会出现一些错误:例如如下代码
var anotherFactorial = factorial;factorial = null;alert(anotherFactorial)// 出错以上代码先把factorial()函数保存在变量anotherFactorial中,然后将factorial变量设置为null,结果指向原始函数的引用只剩下一个。但再接下来调用anotherFactioral()时候,由于必须执行factorial函数,而factoial已经不再是函数,所以就会导致错误,再这种情况下,使用arguments.callee可以解决这个问题。
arguments.callee是一个指向正在执行的函数的指针,因此可以用来实现对函数的递归调用。
例如:
function factorial (num){ if(num){ return 1; }else{ return num*arguments.callee; }}arguments.callee 优点:
1、可以确保无论怎样调用函数都不会出问题。因此编写递归函数时候,使用argments.callee总比使用函数名更保险;
注意点:严格模式下无效,会报错
严格模式下写法:
var factorial = (function f(){ if(num<1){ return 1; }else{ return num*f(num-1); }})二、与定时器的结合使用:
js是单线程语言,但他允许通过设置超时调用和间歇时间来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。
参数:要执行的代码 和 以 毫秒表示时间
//不建议传字符串,传递字符串可能导致性能损失 setTimeout("alter('hello word')", 1000);//推荐方式setTimeout(function(){ alter("Hello world");},1000)setInterval(function(){ alter("Hello world");},1000)注意点:结束
超时调用的代码都是在全局作用域执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined;
实际应用中:
使用超时调用来模拟间歇调用是一种最佳模式,在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用之间启动。
var num = 0, max = 0;function incrrmentNumber{ num++; if(num < max){ setTimeout(incrrmentNumber,500); }else{ alert("Done"); }}setTimeout(incrrmentNumber,500);如果像上面那样使用超时调用,则可以避免这一点。所以不要使用间歇调用;
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javascript定时器取消定时器及js定时器优化方法通常用的方法:启动定时器:window.setInterval(Method,Time)Method是定
javaTimer定时器简单实例代码:publicclassTest{publicstaticvoidmain(String[]args){//Timer定时器
广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。定时器定时器是
接下来进入正题-定时不断刷新页面的方法:1.看到定时,很容易想到js的定时器://第一种方法//由于我们已经有了一个定时器,所以只要在定时器test中加入一句刷
定时器的三种类型是: 1、接通延时型定时器:接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在SIEMENS的PLC中,称为SD型定时器。 2