Javascript 从函数';s以for循环返回?
让我们举个例子:Javascript 从函数';s以for循环返回?,javascript,Javascript,让我们举个例子: function test(i, total) { return total + i * 100 / 999 * -124 / 333; } var total = 0; for (var i = 0; i <= 100; i++) { total = test(i, total); console.log(total); } 功能测试(一,总计){ 返回总数+i*100/999*-124/333; } var合计=0; 对于(var i=0;i
function test(i, total) {
return total + i * 100 / 999 * -124 / 333;
}
var total = 0;
for (var i = 0; i <= 100; i++) {
total = test(i, total);
console.log(total);
}
功能测试(一,总计){
返回总数+i*100/999*-124/333;
}
var合计=0;
对于(var i=0;i这是因为JavaScript是单线程的。您的代码是单线程的。函数调用在JavaScript中是同步的和单线程的。这取决于语言设计。当您从循环中调用test
函数时,循环将等待函数返回
调用setTimeout
时,它会创建一个计时器并立即返回。它不会等待计时器被触发(即使是第一次)。计时器是异步触发的
有关更多信息,请参阅并阅读
“如果测试函数需要3秒钟才能返回,为什么循环要等待
这是不是因为测试中没有异步特性
功能?”
没错。函数的执行在Javascript中是同步的,就像在几乎所有其他语言中一样。执行是沿着一条路径完成的,因此当您调用函数时,它将在返回之前完成,调用后的代码可以继续
如果在函数中使用异步代码(例如使用setTimeout
),则异步代码将被搁置,直到其余代码执行完毕,浏览器重新获得控件,因为Javascript是单线程的
如果在循环中调用test
101次,并且每次都使用setTimeout
,那么在循环完成时,有101段代码等待运行。这101段代码直到循环完成后才能运行。作为乐趣,您保留的代码不能提供从函数返回的值Action在代码运行之前返回
要异步运行代码,您将使用在函数完成时调用的回调。示例:
function test(i, callback) {
window.setTimeout(function(){
var result = i * 100 / 999 * -124 / 333;
callback(result);
}, 1000);
}
var total = 0;
var resultCount = 0;
for (var i = 0; i <= 100; i++) {
test(i, handleCallback);
}
function handleCallback(value) {
total += value;
resultCount++;
if (resultCount == 101) {
console.log(total);
}
}
函数测试(i,回调){
setTimeout(函数(){
var结果=i*100/999*-124/333;
回调(结果);
}, 1000);
}
var合计=0;
var resultCount=0;
for(var i=0;JavaScript中的i调用是阻塞的,但JavaScript没有阻塞等待/睡眠方法,而是使用非阻塞回调来实现该.Logic。