var momement = setTimeout(function(){document.write(222222222222);},1000)
//事实上用控制台调试的话他会执行,而不是所谓的我想当然以为是保存一个值而没有执行它。
PHP中文网2017-04-10 16:43:55
确实会调用,你写了1000毫秒。1秒钟之后会被调用,这个语句是正确的。
setTimeout返回的值是一个句柄,可以用来取消这个setTimeout.
clearTimeout(momement)
难道你是想这样:
//定义
var momement = function(){ setTimeout(function(){document.write(222222222222);},1000)}
//调用:
momement()
// 222222222222
巴扎黑2017-04-10 16:43:55
你这样做相当于调用setTimeout
这个方法,然后把这个方法的返回值给变量momement
,当然是会执行这个方法的呀。
楼主可能是想把一个引用传给momement
,你可以这样做:
function setTimeoutWrapper(){
setTimeout(function(){
document.write(222222222222);
},1000)
}
var momement = setTimeoutWraper;
这样的话,你就可以通过momement()
再调用这个方法啦
迷茫2017-04-10 16:43:55
为什么不执行,你这样就等于是1000MS后调用了function呢,它返回了一个timeoutID给变量了,可以通过clearTimeout(“momement”)来取消这个Timeout,传入的参数就是之前返回的timeoutID
大家讲道理2017-04-10 16:43:55
这是函数调用啊,当然执行,如果你想保存为对象的话
var momement = function() {
setTimeout(function(){document.write(222222222222);},1000);
};
下面的才执行。
momement()
巴扎黑2017-04-10 16:43:55
setTimeout执行会返回一个数字,这个数字代表了该延迟定时器的唯一身份。
因此,我们在调用setTimeout和setInterval的时候,常常会定义一个变量来保存这个数字。
var timer = setInterval(fn, 2000);
于是,有了这个标识着他身份的数字,我们想要停止该定时器的时候就很方便了
clearInterval(timer);
因此当你想给setTimeout/setInterval保存起来不执行的话,通过这种方式是没办法做到的。[应该也做不到],因此我们通常就是在需要使用定时器的时候,定义它,在不需要的时候,清除他,通过上面的方式就很容易实现。
伊谢尔伦2017-04-10 16:43:55
没有太多为什么
因为解释器发现函数名后面带()就会直接调用该函数
不管你是什么setTimeout
还是什么alert
(function(){
return alert(2)
})();
var i = alert(3)
PHP中文网2017-04-10 16:43:55
好吧,我看到大家对于这个回答都不标准,只说中了那么一点。
我在这里补充一个匿名函数的知识,
请参考我以前的回答:js的回调函数一般都用来做什么
哦,对了,应该是回答为什么把setTimeout赋值给一个变量会执行
var timeout = setTimeout(function() {alert('good');},10000);
在这里,告诉程序10s钟之后执行function() {alert('good'); },在这里setTimeout会产生一个句柄赋值给timeout
假设我们突然在10s钟之内不想执行了,
我们可以
clearTimeout(timeout); //根据句柄清除setTimeout,这样就不会执行了。
对了,我这里给一个例子:
var t1 = setTimeout(function() {
alert('我这里是10s后执行的程序');
},10000);
setTimeout(function() {
clearTimeout(t1);
alert('我这个是5s后执行的程序,我这里清除了10s后执行的程序');
},5000);
迷茫2017-04-10 16:43:55
执行。
函数名加括号这种形式只要前面没有function关键字就立即执行。
setInterval也是一样。
var iTime =setInterval(.....)
这样,只不过函数的返回值赋给了变量罢了。
PHPz2017-04-10 16:43:55
这个问题没必要说那么多。
首先你要明白setTimeout
是一个函数,在函数后面加一个括号叫做函数调用表达式,就代表调用这个函数。而调用setTimeout
这个函数的结果就是若干时间后打印那些东西。
你把setTimeout(…)
赋值给另一个变量,只是把函数调用的结果(即返回值)给了那个变量,setTimeout
函数的返回值是一个整数。
最后我再纠正题主问题标题里的一个错误吧:那不叫把setTimeout语句赋给变量,你可以说表达式。语句是没有值的,也没法赋值给别人。