layui 如何在table单元格里嵌入table溢出下拉框框

如何使用定时器settimeout、setInterval执行能传递参数的函数_javascript_ThinkSAAS
如何使用定时器settimeout、setInterval执行能传递参数的函数
如何使用定时器settimeout、setInterval执行能传递参数的函数
内容来源: 网络
无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决。经网上查询后整理如下:
例如对于函数hello(_name),它用于针对用户名显示欢
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:
window.setTimeout(hello(userName),3000);
这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的。而使用字符串形式可以达到想要的结果:
window.setTimeout("hello(userName)",3000);这是方法(一)
这里的字符串是一段JavaScript代码,其中的userName表示的是变量。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下
方法(二):
&script language="JavaScript"type="text/javascript"&
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
//创建一个函数,用于返回一个无参数函数
function _hello(_name){
return function(){
hello(_name);
window.setTimeout(_hello(userName),3000);
里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在
window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。
另外也有人通过修改settimeout、setInterval来实现。即下面的
&script language="JavaScript"type="text/javascript"&
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}//*=============================================================
功能: 修改 window.setInterval ,使之可以传递参数和对象参数
方法: setInterval (回调函数,时间,参数1,,参数n)
参数可为对象:如数组等
//*=============================================================
var __sto = setI
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);
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信setInterval定时器有效率更好一点的替代方法嘛? - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
setInterval 效率很差么? 不过我一般喜欢用 setTimeout 自己去递归…
真巧,晚上刚翻译完Node.js高级编程第六章,讲的就是setInterval和setTimeout,不知道你说的“效率更好”指的什么,作者用setInterval代替setTimeout的目的是为了确保回调函数的串行执行,估计1楼neuront用setTimeout递归替代setInterval就是这个目的。,可以,不知道对你有用没。
貌似看到过说 setTimout 即便指定 0 也有几十毫秒才触发,
不知道 process.nextTick 性能会不能高一点
《node.js高级编程》上说process.nextTick会快不少,因为nextTick基于事件循环,而setTimeout基于JavaScript运行时内部的事件队列。
nodejs 是单进程的,所以callback的执行一定有延迟。
如果对时间要求很高(RTOS),nodejs 就不是一个很适合的工具。
毫秒数参数的有效范围是 1~0x7FFFFFFF, 不在这个范围内都会被置为 1.
另外, setTimeout 不是一个 Javascript 版的 Thread.sleep 函数. 它将无参函数加入事件队列, 并在至少 X 毫秒后执行. js 是单线程的, 因此在设定的时间如果有其它函数还在运作那么被设定延迟执行的函数只能等待了.
setTimeout(callback,0) 我一直不是很面白,在什么时候情况下这样用。
一个过程优先级不很高, 但是又可能占用太长时间, 可能要停下来看看有没有别的需要执行的函数, 可以调这个. 其它场景没怎么考虑过. 话说这种场景似乎也很少见.
jQuery源码里很多地方都用到了setTimeout(callback)可以去看看。打个比方:
function read_data(){
read_file();
write_log();
//setTimeout(write_log,0);
read_data();
show_data();
假设write_log()花费1秒,那么read_data()得多等1秒才能返回,然后show_data()才能把数据展示给用户。但是用户根本不关心你的日志,让用户为此多等1秒其实毫无意义,这种场景就可以用setTimeout(callback,0)来调用write_log,让read_data()立刻返回并将数据展示给用户。node里可以用nextTick,会更快一些。
谢谢你们的例子,不错不错。
那 process.nextTick 中间停下来看的么?
node 文档给的解释是这等价于 setTimeout(callback, 1) 但是更有效率因为底层实现不一样. 可以用来做异步递归, 如
function factorial(n) {
if (n & 2) return 1;
return n * factorial(n - 1)
n 特别大的时候会导致进程阻塞所以可以改写成下面的异步版本
function factorial(n, fac, cb) {
if (n & 2) return cb(fac);
process.nextTick(function() {
factorial(n - 1, fac * n, cb);
但不管怎么说我觉得这样还是太奇葩了, 肯定是什么地方不该用 js 的用了 js.
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的JavaScript中setTimeout和setInterval函数的传参及调用
作者:zxsrendong
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了JavaScript中setTimeout和setInterval函数的传参及调用,着两个函数可以把要执行的代码在设定的一个时间点插入js引擎维护的一个代码队列中,需要的朋友可以参考下
如何向 setTimeout 、 setInterval 传递参数
看如下代码:
var str = 'aaa';
var num = 2;
function auto(num){
alert(num);
setTimeout('auto(num)',4000);
这样写是可以正常工作的,但是如其说这是参数传递,还不如说是直接使用的全局变量。所以,这种写法是没有必要的,一般情况下更多的是用到传递局部变量作为参数。
把代码修改一下:
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout('auto(str)',4000);
function auto(a){
这种写法会报错,如果把取消对 str 的全局声明的注释,就会输出 aaa,即函数依然是调用全局变量。
看下面的代码:
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout('auto("str")',4000);
function auto(a){
注意上面的 str ,这样写会输出 “str”,也就是说定时器调用函数后,是把 str 直接当作了参数。这样传递的参数永远是字符串。这不是我们想要的结果。
要想传递除字符串意外的参数,可以使用闭包,看下面代码:
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout(auto(str),4000);
function auto(str){
return function(){
alert(str);
输出结果为 ‘bbb',如果给auto(str)加上引号同样会报错。
当然,这样写也是不错的:
var num = 2;
function test(){
var str = 'bbb';
//setTimeout(auto(str),4000);
setTimeout(function(){alert(str)},4000);
function auto(str){
return function(){
alert(str);
最后需要注意的是,字不使用闭包传递参数时,定时器调用的函数是要加引号的,不加引号,会报错。以上情形同样适合 setInterval();
setTimeout 、 setInterval 中的函数调用
有如下代码:
var num = 2;
function auto(){
alert(num);
setTimeout(auto(),4000);
在这段程序里,测试的时候立刻就可以看到弹出的警告框。也就是说按照以上方法引用函数,定时器是不起作用的。
同样,对于setInterval上面的写法也不能正常工作,程序只能弹出一次警告框,然后报错。
把定时器改为
setInterval('auto()',4000);
setTimeout('auto()',4000);
程序可以正常工作。
当不使用auto()调用函数,只使用 auto会是什么样呢?
var str = 'aaa';
var num = 2;
function auto(){
alert(num);
//setInterval(auto,4000);
setTimeout(auto,4000);
这样写程序都可以正常工作;
如果给auto加上引号
//setInterval('auto',4000);
setTimeout('auto',4000);
都不能正常工作。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 table 下拉框初始化 的文章

 

随机推荐