首页 > 为什么我把一个setTimeout语句赋值给一个变量,它会执行呢?

为什么我把一个setTimeout语句赋值给一个变量,它会执行呢?

var momement = setTimeout(function(){document.write(222222222222);},1000)
//事实上用控制台调试的话他会执行,而不是所谓的我想当然以为是保存一个值而没有执行它。


这个问题没必要说那么多。

首先你要明白setTimeout是一个函数,在函数后面加一个括号叫做函数调用表达式,就代表调用这个函数。而调用setTimeout这个函数的结果就是若干时间后打印那些东西。

你把setTimeout(…)赋值给另一个变量,只是把函数调用的结果(即返回值)给了那个变量,setTimeout函数的返回值是一个整数。

最后我再纠正题主问题标题里的一个错误吧:那不叫把setTimeout语句赋给变量,你可以说表达式。语句是没有值的,也没法赋值给别人。


执行。

函数名加括号这种形式只要前面没有function关键字就立即执行。

setInterval也是一样。

var iTime =setInterval(.....)

这样,只不过函数的返回值赋给了变量罢了。


首先,setTimeout是一个函数,后面加了一个括号,执行这个函数,之行结束后,返回的值赋给变量


setTimeout函数是有返回值的,var momement = setTimeout(function(){document.write(222222222222);},1000)执行完成之后setTimeout就开始工作了,同时在momement中保存这个计时器的句柄,你可以调用clearTimeout(momement)来取消这个计时器。


请楼主先理解一下 setTimeout 的作用是什么.

参考连接: https://developer.mozilla.org/zh-CN/docs/Web/API/Window/setTimeout


你这样做相当于调用setTimeout这个方法,然后把这个方法的返回值给变量momement,当然是会执行这个方法的呀。

楼主可能是想把一个引用传给momement,你可以这样做:

function setTimeoutWrapper(){
    setTimeout(function(){
        document.write(222222222222);
    },1000)
}
var momement = setTimeoutWraper;

这样的话,你就可以通过momement()再调用这个方法啦


好吧,我看到大家对于这个回答都不标准,只说中了那么一点。
我在这里补充一个匿名函数的知识,
请参考我以前的回答: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);


确实会调用,你写了1000毫秒。1秒钟之后会被调用,这个语句是正确的。
setTimeout返回的值是一个句柄,可以用来取消这个setTimeout.

clearTimeout(momement)

难道你是想这样:

//定义
var momement = function(){ setTimeout(function(){document.write(222222222222);},1000)}
//调用:
momement()

// 222222222222

没有太多为什么

因为解释器发现函数名后面带()就会直接调用该函数

不管你是什么setTimeout还是什么alert

(function(){
    return alert(2)
})();

var i = alert(3)

这是函数调用啊,当然执行,如果你想保存为对象的话

var momement = function() {
    setTimeout(function(){document.write(222222222222);},1000);
    };

下面的才执行。

momement()

为什么不执行,你这样就等于是1000MS后调用了function呢,它返回了一个timeoutID给变量了,可以通过clearTimeout(“momement”)来取消这个Timeout,传入的参数就是之前返回的timeoutID


setTimeout执行会返回一个数字,这个数字代表了该延迟定时器的唯一身份。
因此,我们在调用setTimeout和setInterval的时候,常常会定义一个变量来保存这个数字。

var timer = setInterval(fn, 2000);

于是,有了这个标识着他身份的数字,我们想要停止该定时器的时候就很方便了

clearInterval(timer);

因此当你想给setTimeout/setInterval保存起来不执行的话,通过这种方式是没办法做到的。[应该也做不到],因此我们通常就是在需要使用定时器的时候,定义它,在不需要的时候,清除他,通过上面的方式就很容易实现。

【热门文章】
【热门文章】