无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决。经网上查询后整理如下:
例如对于函数hello(_name),它用于针对用户名显示欢
迎信息:
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}
这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:
window.setTimeout(hello(userName),3000);
这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的。
而使用字符串形式可以达到想要的结果:
1:window.setTimeout("hello(userName)",3000);
这里的字符串是一段JavaScript代码,其中的userName表示的是变量。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下方法
2:var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}
//创建一个函数,用于返回一个无参数函数
function _hello(_name){
returnfunction(){
hello(_name);
}
}
window.setTimeout(_hello(userName),3000);
这 里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。
3:function doSomething(_name){
return (function(){
alert("hello,"+_name);
});
}
var functRef = doSomething("jack");
setTimeout(functRef, 500);
另外也有人通过修改settimeout、setInterval来实现。即下面的
4:
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}//*=============================================================
//* 功能: 修改 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);
分享到:
相关推荐
如果想要保留原生`setInterval`的行为,可以对其进行扩展以支持传递额外参数。例如: ```javascript function foo(id) { alert(id); } var _sto = setInterval; window.setInterval = function(callback, ...
在这里,我们直接传递`show`函数作为`setInterval`的第一个参数,而不是它的字符串表示,这样`setInterval`就能正确地调用该函数。 总结一下,当`setInterval`和`setTimeout`与jQuery混用时,需要注意以下几点: ...
比如,要向名为fn的函数传递参数para,正确的做法是使用setInterval(function(){fn(para)}, 2000)。 第二种传参的错误示例是直接在字符串中进行拼接。例如,尝试这样写setInterval("$.a("+$start+")", 2000),导致...
然而,需要注意的是,在使用 `setInterval` 或 `setTimeout` 时,尽量避免将函数名用引号包裹,因为这会导致JavaScript将其解释为字符串而非函数引用。如"方法2"所示,正确的方式是直接传递函数名,不加引号和括号:...
了解如何使用`setTimeout`和`setInterval`进行定时任务,或者使用`Promise`和`async/await`处理异步操作,都是JavaScript编程的基础。 6. **扩展插件例子**:实践是检验理论的最好方式。通过分析和模仿现有的Fire...
在原生JavaScript中,`setTimeout`的基本用法是传递一个字符串或者函数作为第一个参数,表示要在指定延迟后执行的代码,第二个参数是延迟时间(以毫秒计)。例如: ```javascript function funA() { log('funA...'...
当函数需要参数时,可以使用匿名函数来包裹需要执行的函数,这样可以在`setTimeout`中传递参数。例如: ```javascript function funC(v) { log('funC...' + v); setTimeout(function() { funC(v + 1); }, 1000)...
实现这一功能可能涉及到JavaScript的定时器(setTimeout或setInterval)以及与Video.js事件系统的集成,以便在倒计时结束后触发相应的操作。 2. **滚动公告**:滚动公告是播放器上方或下方显示的一条可滚动文本信息...
- 函数作为一等公民,可作为参数传递,也可作为返回值。 - 闭包允许函数访问并操作其外部作用域的变量,常用于封装和数据隔离。 9. **正则表达式**: - 正则表达式用于字符串匹配和搜索,如`match`、`test`、`...
1. **动态参数配置**:允许用户通过URL参数或其他方式传递倒计时的时间。 2. **兼容性处理**:考虑到不同浏览器对API的支持情况,增加兼容性处理。 3. **样式美化**:通过CSS来美化倒计时显示的文字样式。 4. **错误...
WTWindowTimer 在 iOS 7 中,Apple 引入了[通过 ...该库尝试实现窗口计时器的完整规范,包括将字符串作为第一个参数传递给setTimeout或setInterval或将附加参数传递给上述两个函数。 如何使用它 创建WTWindowTimers
- 定时器和延时函数:如setTimeout和setInterval。 - Ajax请求和跨域问题:处理服务器通信和解决跨域限制。 8. ES6新特性: - let和const关键字:新的变量声明方式,提供了更好的作用域管理。 - 箭头函数:简洁...
- 动画和定时任务:`setTimeout`和`setInterval`函数也接受函数作为参数,定义了延迟执行或周期性执行的任务。 4. 箭头函数的应用: 箭头函数是ES6引入的新语法,它提供了更简洁的函数定义方式。由于箭头函数没有...
26. 计时器(Timers):如setTimeout和setInterval,用于延迟或周期性执行代码。 27. 模块(Modules):ES6引入模块系统,通过import和export进行导入导出。 28. 错误处理(Error Handling):try...catch用于捕获...
3. 函数:理解函数的定义、调用、参数传递以及函数表达式和匿名函数的概念。 4. 作用域:知道全局作用域和局部作用域,以及块级作用域(let关键字引入)的区别。 5. 事件处理:理解DOM事件和事件处理机制,如...
3. **定时器**:使用`setTimeout`或`setInterval`控制代码执行的时机,如延迟显示信息,模拟心跳效果。 4. **CSS3动画**:借助JS改变元素的CSS样式,配合CSS3的`transition`或`animation`属性,实现平滑过渡和复杂...