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