7

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; }

問題は、条件ステートメントのelseブランチが無名関数を処理しようとしたときに、戻り値が割り当てられないことです。むしろ、関数全体を文字列として。つまり、HTMLページに次のように表示されます。

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; }}

ChromeとFirefoxでコードをテストしましたが、結果は同じです。

どんな助けでもありがたいです、そして前もってありがとう。

4

1 に答える 1

17

2つの引数を渡して関数を呼び出す必要があります。そうしないと、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)匿名関数内で使用されるものは、関数の最初で宣言された2つの変数に対応する最後に引数として渡されるものと同じではないことに注意してくださいfoo

于 2010-02-20T10:35:23.537 に答える