setInterval的第一个参数可以是含js命令的字符串,也可以是函数对象。但若是含js命令的字符串时,要千万注意该字符串是在全局作用域下执行的!!!下面来看一个例子:
修改后的正确代码为:
运行结果如下:
且这种以字符串调用的方法是可以传参的!!!只不过参数也必须是全局的变量。如这样是不会报错的
但这样就会报错:
而当第一个参数是以函数对象的形式给出时,其实白痴的我曾经写过这种写法:
发现这种仅执行一次,找了半天原因,逻辑上并没有错误,后来上网查阅资料发现原来是写法出现了错误,这样写的话是函数的调用,而且并无任何返回值什么的,仅是一次函数调用,而setInterval要求第一个参数是函数或是含js命令的字符串,说白了相当于这个setInterval是无效的。
而正确的写法应该是这样滴:
但其实这种setInterval我觉得第一个参数用匿名函数最不容易出错了(不喜勿喷):
这就是折磨了我两个晚上才解决的问题(实在是个low B)。
这里再提一下看到的另一种可以传参的方法(原文:https://wayne173.iteye.com/blog/1907530),修改window.setinterval的定义
//* 功能: 修改 window.setInterval ,使之可以传递参数和对象参数
//* 方法: setInterval (回调函数,时间,参数1,,参数n) 参数可为对象:如数组等
var __sto = setInterval;
window.setInterval = function(callback,timeout,param){
var args = Array.prototype.slice.call(arguments,2);
var _cb = function(){
callback.apply(null,args);
}
__sto(_cb,timeout);
}
window.setInterval(hello,3000,userName);
//-->
若有不对的地方请加以指正。若转载请声明出处。谢谢