Javascript 为什么会这样?

Javascript 为什么会这样?,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,只是好奇为什么setInterval通过变量赋值调用? 我想setInterval有特殊的作用域或类似的东西 mobileBlink(); 函数mobileBlink(){ var blinker=函数(){ jQuery('.navbar toggle').fadeTo(1500,0.4).fadeTo(1400,1.0); } //为什么会这样? var triggerA=设定间隔(blinker,2000); //为什么不调用? var alerta=函数(){ 警惕(‘哼’); };

只是好奇为什么setInterval通过变量赋值调用? 我想setInterval有特殊的作用域或类似的东西

mobileBlink();
函数mobileBlink(){
var blinker=函数(){
jQuery('.navbar toggle').fadeTo(1500,0.4).fadeTo(1400,1.0);
}
//为什么会这样?
var triggerA=设定间隔(blinker,2000);
//为什么不调用?
var alerta=函数(){
警惕(‘哼’);
};
jQuery('.navbar toggle')。单击(函数(){
清除间隔(triggerA);
});

}
它提供了一个句柄,稍后可用于清除计时器

clearInterval(triggerA);

在第一种情况下,您正在调用函数-由带参数的括号表示,即
(blinker,2000)
-并且您正在将此调用的结果分配给变量(无论函数返回什么)

在第二种情况下,函数后面没有括号,因此不会调用它。您只是将函数本身分配给变量

如果在第二个案例中添加括号,它将调用,您将看到警报,例如:
var-alerta=function(){alert('huh');}()-注意末尾的
()

顺便说一下,不要被函数定义中的括号所迷惑,即
function()
末尾的括号。这些仅仅表明您将要定义一个没有参数的函数,它不是一个实际的调用。在计数的函数之后是括号。例如,你可以做:
alert(函数(foo){returnfoo*3;}(100))并且它将警告“300”。第一个括号,
(foo)
,表示函数接受一个名为
foo
的参数。函数后面的第二个括号
(100)
,实际上是用一个参数调用函数(本例中为100)。

以下行:

var triggerA = setInterval(blinker, 2000);
实际上不调用任何函数,除了
setInterval

该函数接受两个参数:一个函数和一个表示第一个参数调用之间间隔偏移量毫秒长度的数字

setInterval
函数将通过调用类似于
arg1()
的函数来处理传入函数的调用。注意括号

至于第二个问题,函数没有被调用,因为您所做的只是将变量
alerta
定义为对所编写匿名函数的引用。要调用函数,需要显式调用(调用函数的方法很多)

区别在于,一个是函数的显式调用(在本例中,通过函数名直接调用函数),另一个是函数定义,但您只需将该变量设置为函数的引用。

这是:

var triggerA = setInterval(blinker, 2000);
实际上正在调用函数
setInterval
。如前所述,setInterval确实返回一个值

在这里,您正在创建函数:

var alerta = function(){
    alert('huh');
};
function
是Javascript中的一个关键字,告诉它您正在定义一个函数,而不是调用它

setInterval
是一个函数的名称,因此它假设您正在调用该函数,因为在它后面有parens
()


希望对您有所帮助。

setInterval与其他函数一样是一个函数
triggerA
是该函数返回的值


相反,
alerta
引用函数本身,而不是它返回的值,因为您还没有要求它执行。你刚刚定义了它。

你是在问
blinker
的用法还是
triggerA=setInterval()
的用法?现在还不清楚你在问什么。明白了,我们可以给一个变量分配一个函数,只要它被调用,它就会按照通常的方式运行……意思是:var triggerA=setInterval(blinker,2000);与设置间隔相同(blinker,2000);但前者将结果添加到变量中。听起来还好吗?@bubbaShrimp:好吧,你并不是真的把函数赋给变量,而是赋给函数的返回值(在这种情况下)。有些函数返回值。为了使用values.Coolio做一些事情,您必须将这些值分配给某个对象。谢谢你们两位。