問題は、グローバル変数を上書きしていることです。つまり、数学を台無しにしています。
j = domath(i) - j;
この式は左から右に評価されます。を呼び出すととdomath()に新しい値が割り当てられるため、ここでの効果的なコードは次のようになります。ij
j = (i = 4) * 3 + 1 - 1;
したがって、これが完了すると、jが に設定されますが12、実際には ではありません11。さらに、iの値を持ちます4。
関数内でローカル変数を使用するには、それらを再宣言する必要があります。基本的に、このスコープ外にあるグローバル変数を非表示にします。
function domath(x) {
var i = 4;
var j = 1;
return i * x + j;
}
今回は、最初の割り当てはこれに解決されdomath()ます。ij
j = 4 * 3 + 1 - 2
これが完了jすると、期待どおりに設定さ11れます。
このような問題を回避するには、新しい変数を定義するときに常に使用varすることをお勧めします (とにかくコードを記述したい場合はこれを行う必要がありますstrict)。そのような短くてわかりにくい変数名は使用しないでください。1 文字の変数名の使用をイテレータやその他のスコープが非常に限定されたものに制限することを検討します。何かがグローバルであることは決してありません。