gpt4 book ai didi

javascript - 这是自动执行的函数吗?如果是,它们是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 18:51:22 24 4
gpt4 key购买 nike

我在 stackoverflow 中找到了这段代码,但我仍然在问自己计时器第一次自动启动的准确程度。

但是我注意到评论这一点:

 //Optionally, activate each timer:
//restart(i)();

将阻止计时器自动启动。

它可能是一个自动执行的函数,如果是的话。即使在这种情况下仍未单击按钮,自动执行的功能是否始终会自动启动?

我还发现还有其他可能是函数内部自动执行的函数,有人可以解释一下这是如何工作的吗。

<!DOCTYPE html PUBLIC>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>


<script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>

</head>

<body>


<input type="submit" name="clear" value="Stop Timer" />
<input type="submit" name="reset" value="Restart Timer" />
<span id="count0">0</span>
<input type="submit" name="increment" value="Increment" />
<br />
<input type="submit" name="clear" value="Stop Timer" />
<input type="submit" name="reset" value="Restart Timer" />
<span id="count1">0</span>
<input type="submit" name="increment" value="Increment" />

<br />
<input type="submit" name="clear" value="Stop Timer" />
<input type="submit" name="reset" value="Restart Timer" />
<span id="count2">0</span>
<input type="submit" name="increment" value="Increment" />

<br />
<input type="submit" name="clear" value="Stop Timer" />
<input type="submit" name="reset" value="Restart Timer" />
<span id="count3">0</span>
<input type="submit" name="increment" value="Increment" />

<br />
<input type="submit" name="clear" value="Stop Timer" />
<input type="submit" name="reset" value="Restart Timer" />
<span id="count4">0</span>
<input type="submit" name="increment" value="Increment" />

<script>




(function(){ //Anonymous function, to not leak variables to the global scope
var defaultSpeed = 3000; //Used when missing
var timerSpeed = [500, 1000, 2000, 4000, 8000];

var intervals = [];



function increase(i){
return function(){
var elem = $("#count"+i);
elem.text(parseInt(elem.text()) + 1);
}
}
function clear(i){
return function(){
clearInterval(intervals[i]);
}
}
function restart(i){ //Start AND restart
return function(){
clear(i)();
increase(i)();
intervals[i] = setInterval(increase(i), timerSpeed[i]||defaultSpeed);
}
}




// Manual increment
$('input[name=increment]').each(function(i){
$(this).click(function(){
restart(i)();
increase(i)();
});
});

// Clear timer on "Clear"
$('input[name=clear]').each(function(i) {
$(this).click(clear(i));
});

// Restart timer on "Restart"
$('input[name=reset]').each(function(i) {
$(this).click(restart(i));

//Optionally, activate each timer:
restart(i)();
});


})();






</script>
</body>
</html>

最佳答案

代码中只有一个自执行函数,它是代码顶部的包装函数(//匿名函数,以免将变量泄漏到全局范围)。

自执行函数可能具有以下格式:(function(parameters){})(arguments list);

restart这样的函数不是自执行函数,它们不会自动调用,而是手动调用。这些函数是返回另一个函数的函数,它被称为 closure .

因此,如果您查看语句 restart(i)();,就会发现发生了两件事。1. restart(i) 返回一个函数 2. 我们使用第二组括号调用该函数。
为了更好地理解,我们可以将此声明分为两部分

var fn = restart(i);
fn();

更新:由于以下代码,计时器自动启动

//Optionally, activate each timer:
restart(i)();

它将启动每个计时器的启动

关于javascript - 这是自动执行的函数吗?如果是,它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com