javascript里setTimeout(send(), 3000); 与 setTimeout(send,3000)的区别

是否是,加载js的时候setTimeout(send(), 3000); 里send这个函数就执行一次。不会依照顺序来。
而setTimeout(send, 3000);则是按正常的上下顺序来?

这是setTimeout定义:


定义和用法

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。

语法

setTimeout(code,millisec)


参数

描述


code    必需。要调用的函数后要执行的 JavaScript 代码串。    

millisec    必需。在执行代码前需等待的毫秒数。    


//-------------------------

code调用运行机制:

    当code为字符串时,会执行里面的字符串

    当为函数名称时,会执行函数,但是不会再执行函数的字符串返回值

    当为函数名称+括号时,会执行函数,并且也执行函数的返回值。


下面的例子可以帮助理解这种机制:


<div id="d1"></div>
<div id="d2"></div>
<script>
setTimeout(send1,1000);//传入函数名称
setTimeout(send2(),1000);//传入带括号的函数
setTimeout("alert('执行完毕')",1000);//直接传入字符串
function send1(){
document.getElementById("d1").innerHTML=(new Date());
return 'document.getElementById("d1").innerHTML="1现在时间是"+document.getElementById("d1").innerHTML;';
}
function send2(){
document.getElementById("d2").innerHTML=(new Date());
return 'document.getElementById("d2").innerHTML="2现在时间是"+document.getElementById("d2").innerHTML;';
}
</script>



运行之后会发现,第一种调用只执行了函数,而没有执行函数的返回值,第二种除了执行了函数,还执行了函数以字符串形式的返回值.


由此可以归纳:

1. 需要连函数的返回值都要执行的话才用带括号的形式.这个前提是函数的返回值是字符串形式.这样的形式相当于调用了一个动态函数.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-09
一般来说,setTimeout(send(), 3000); 这种写法是错误的,加了括号的话就要加上引号!他会想eval一样吧字符串当做代码运行。
第2个回答  2014-03-08
send是函数指针 send()是函数返回值 已经执行过了一般返回undefined 所以再setTimeout毫无意义
相似回答