Как работает инструкция If(), если в качестве условия в нём есть несколько выражений?
В JS-коде имеется такая функция:
function checkVal( num) {
var val = id('me' + num).value;
if(isNaN( val ))
alert(val + ' не является числом.')
else {
if((function(x) { return (x | 0) === x; })(parseFloat( val)) === (function(x) { return (x | 0) === x; })(parseFloat(String( id(fullScale_0).value))))
alert('Не верный формат.' + val )
else
id('regReading_' + num).value = val;
}
}
Код работает, но я не понимаю логику условия во вложенной инструкции if(). А именно:
- Почему три логических выражения в условии перечислены без всяких разделителей или логических операторов;
- Откуда берётся значение "х" в функциональных выражениях function(x).
Ответы (1 шт):
Откуда берётся значение "х" в функциональных выражениях function(x).
Функция объявляется и сразу вызывается. Такое можно делать с функциями
(function(arg) {
alert(arg);
})(666);
// ^^^^^ сразу вызвали с переданным аргументом
Почему три логических выражения в условии перечислены без всяких разделителей или логических операторов;
Если уметь форматировать код то можно заметить следующее
if (
(function(x) { |
return (x | 0) === x; | переменная "a"
})(parseFloat(val)) |
===
(function(x) { |
return (x | 0) === x; | переменная "b"
})(parseFloat(String(id(fullScale_0).value))) |
)
В итоге сводится всё к if (a === b), т.к. говорилось выше, что функции сразу выполняются и получают результат своих действий.
Единственно, в самой последней функции в качестве аргумента поступает не "чистый" аргумент, а результат выполнения другой функции, у которой в качестве аргумента идёт ещё одна функция. И получается некая матрёшка:
- выполнится самая первая
id(fullScale_0).value) - затем её результат передастся в функцию
String( СЮДА ) - дальше результат выполнения передастся в
parseFloat( СЮДА ) - и затем результат передастся в самовызывающуюся функцию