私はすでにこのコードを機能させる方法を知っていますが、私の質問は、なぜそれがこのように機能するのか、そして私が正しいことをしているのかということです。
私の問題を紹介するために私が作ることができる最も簡単な例はこれです:
ボタンを押すだけで入力フィールドの値を10ずつ増やす関数があるとしましょう。
var scopeTest = {
parseValue : function( element, value ) {
value = parseInt( element.val(), 10 );
//Why does this not return the value?
return value;
},
incrementValue : function( element, button, value ) {
button.on('mousedown', function (e) {
//Execute the parseValue function and get the value
scopeTest.parseValue( element, value );
//Use the parsed value
element.val( value + 10 );
e.preventDefault();
});
},
init : function () {
var element = $('#test-input'),
button = $('#test-button'),
value = '';
this.incrementValue( element, button, value );
}
};
scopeTest.init();
メソッド内で実行すると、メソッドがvarをparseValue
適切に返さないため、上記のコードは機能しません。value
incrementValue
どうやらそれを解決するには、次のようにscopeTest.parseValue( element, value );
パラメータをvalue
変数に設定する必要があります。
value = scopeTest.parseValue( element, value );
コードが機能するより。
しかし、私の質問はなぜですか?なぜこの余分な変数代入ステップが必要なのですか、なぜreturnステートメントでは不十分なのですか?また、私は自分の関数/メソッドですべてを正しく行っていますか、それともこれはJavaScriptが機能する方法ですか?
ここでの実例=> http://jsfiddle.net/Husar/zfh9Q/11/