2012-01-23 1 views
2

Может ли кто-нибудь объяснить оператора запятой в инструкции FOR?Запятый оператор в цикле FOR, как это работает?

function funct_1(c){ 
    for (var a = x, e = y; 0 < c;){ 
     var p = c/2; 
     var c = c/10; // wtf, it is already defined as function argument!! 
    } 
} 

Кроме того, последнее утверждение, подобное «a ++», похоже, отсутствует, я никогда не видел ничего подобного. что это значит? Благодаря!

+1

Это не JavaScript, –

+0

@amnotiam, что это? Я могу правильно пометить его, если это необходимо. –

+0

Не уверен. В JS запятая будет работать одинаково, но JS не имеет статически типизированных переменных. –

ответ

2

Эта запятая просто добавляет разделение для нескольких объявлений. Другими словами, ваш цикл for устанавливает a, равный x, а также e, равный y.

Что касается отсутствия инструкции приращения, то тот факт, что она отсутствует, означает, что цикл for не будет явно увеличивать любую переменную.

+0

Спасибо. Кроме того, цикл имеет другое определение «c» внутри него. var c = c/10; как это возможно, если c уже объявлен ранее в коде? означает ли это, что он рассматривается как новая переменная, а старый c не учитывается в цикле после нового определения? – user1015551

+0

@ пользователь1015551 нет действительно. Он не обрабатывает 'c' как новую переменную, он просто присваивает значение' c/10' обратно 'c'. Другими словами, если 'c' равно' 200', и вы говорите 'c = c/10;', вы в основном говорите 'c = 200/10;'. Имеют смысл? –

+0

да, спасибо мужчина. поэтому почему код имеет «var c =» внутри цикла, а не просто «c =». Имеет ли использование var в этом случае какое-либо другое значение, или оно может также не быть там? – user1015551

0

Оператор запятая в C, C++ и JavaScript (может быть, C#) работает следующим образом:

comma_operator(statement_1, statement_2) { 
    execute statement_1 
    return statement_2 
} 

Таким образом, в цикле инициализирует два целочисленных значений, a и e, которые устанавливаются в x и y, соответственно. Инкремента нет, потому что цикл сравнивается с c, который, вероятно, устанавливается где-то внутри цикла.

+1

Dunno о C или C++, но функция обработки запятой работает как [this] (http://es5.github.com/#x11. 14) в javascript. Он отделяет ** выражения **, а не утверждения. Вы можете написать «var x, y;», который является одним из операторов, вы не можете написать «var x, var y;», который представляет собой два оператора, которые должны быть разделены точкой с запятой. – RobG

1

Запятая позволяет вам инициализировать более одной переменной в начале цикла. И отсутствующий оператор приращения означает, что внутри цикла должен быть некоторый скрипт, который в конечном итоге удовлетворит условию завершения, иначе цикл никогда не завершится.

+0

Спасибо! означает ли это условие здесь не определено? или условие c <0? – user1015551

+0

@ user1015551 условие определяется как '0

+0

Спасибо, человек, я ценю! – user1015551

 Смежные вопросы

  • Нет связанных вопросов^_^