JavaScript: Когда присвоение анонимной функции к переменному, функциональному возвращаемому значению не передается, скорее функция как строка

Я пытаюсь изучить JavaScript, но я столкнулся с препятствием. Если ответ очевиден и достижим посредством простого поиска, я приношу извинения заранее. Я - новичок к программированию и JavaScript, и не уверенный что строка запроса следовать.

В следующем коде функция принимает значения от HTML-формы, делает некоторую обработку и передает их обратно. Я протестировал входной и выходной процесс, и он работает правильно.

function foo() {

var x = parseInt(document.formdata.fieldone.value);
var y = parseFloat(document.formdata.fieldtwo.value);

if (isNaN(y))
    { var z = x; }
else
    { var z = function(x, y) {
            if ((y * (x / 100)) < 1) {
                return (x + Math.ceil(y * (x / 100))); }
            else if ((y * (x / 100)) > 1) {
                return (x + Math.round(y * (x / 100))); }
            else {
                return 0; } } }

var bar = document.getElementById("output");

bar.innerHTML = z; }

Проблема, когда еще ответвление условного оператора пытается обработать анонимную функцию, возвращаемое значение не присвоено; скорее полнота функции как строка. Таким образом, следующее появляется в странице HTML:

функция (x, y) {если ((y * (x / 100)) <1) {возврат (x + Math.ceil (y * (x / 100)));} еще, если ((y * (x / 100))> 1) {возврат (x + Math.round (y * (x / 100)));} еще {возвращаются 0; }}

Я протестировал код в Chrome и Firefox, и результатом является то же.

Любая справка ценится и заранее спасибо.

6
задан Omega 20 February 2010 в 10:31
поделиться

1 ответ

Вам необходимо вызвать функцию, передав ей два аргумента, потому что в противном случае переменная z просто сохранит ссылку на эту функцию, но не будет ее оценивать:

var z = (function(x, y) {
    if ((y * (x / 100)) < 1) {
        return (x + Math.ceil(y * (x / 100))); }
    else if ((y * (x / 100)) > 1) {
        return (x + Math.round(y * (x / 100))); }
    else {
        return 0; 
    } 
})(x, y);

Обратите внимание, что ( x, y) , используемые внутри анонимной функции, не совпадают с переданными в качестве аргументов в конце, которые соответствуют двум переменным, объявленным в начале функции foo .

15
ответ дан 8 December 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: