2013-07-10 1 views
0

Это актуально, b.c. Я хочу проверить структуры циклов. То, что я обычно делаю, приводится в простом заявлении, таком какЗапущены пустые блоки?

i++ 

в петле. Я делаю это b.c. Интересно, не будет ли интеллектуальный интерпретатор работать без пустых блоков. Например.

for(var i = 0; i < 10; i++) { 
} 

не может быть петлей вообще, поскольку в цикле ничего нет.

так что я обычно делаю что-то вроде:

for(var i = 0; i < 10; i++) { 
    i++; 
} 

Но это делает проверить i++ заявление, а также структуры петли, которые я не хочу.

+2

Умные переводчики делают умные вещи, так что ответ может быть. Однако сегодняшние JS-среды намного больше, чем простые переводчики. –

+2

Пропуск петель вроде бы не был бы умным вообще, я сомневаюсь, что любой интерпретатор сделает это. – bfavaretto

+1

@ bfavaretto: Это можно было бы оптимизировать, чтобы просто установить 'i' в его окончательное значение. Но я задаюсь вопросом, что такое точка цикла, за исключением того, чтобы сделать «i» равным окончательному значению. –

ответ

2

Посмотрите на это. Обратите внимание на задержку при попытке показать предупреждение: http://jsfiddle.net/xs724/

for(var ii = 0; ii < 1000000000; ii++){} 
alert("DONE"); 

Я испытал это в хроме. Скорее всего, это зависит от браузера и браузера.

JSPerf Ссылка: http://jsperf.com/js-optimizationlooping

+0

+1 очень чистый и умный тест. – Igor

+0

+1. Поместите его в jsperf, чтобы мы могли убедиться, что все браузеры не делают эту оптимизацию. –

+0

Откуда взялась задержка? Это из jsFiddle загрузки страницы? Сколько из цикла? –

1

Ответ: Вы никогда не знаете. В современных машинах JavaScript много оптимизаций. Одним из примеров является уничтожение мертвого кода, которое пропускает код, который не влияет на конечный результат.

Был довольно интересный спор об этой функции в IE9: http://digitizor.com/2010/11/17/internet-explorer-9-caught-cheating-in-sunspider-benchmark/

Но почему вы хотите запустить пустой блок снова и снова так или иначе?

Если вы хотите интерпретатор JavaScript, чтобы просто ждать попробовать этот ответ:
What is the JavaScript version of sleep()?
Sleep in Javascript - delay between actions

+0

+1 «Никогда не знаешь» - это единственный реальный ответ, если только не стоит изучать источник каждого обновления. –