をループします。それは#yyボタンを押すとき.heads divの幅を増加し、#zzを押したときにそれを減少させる:は期待のように、次のコードが動作する
var q = ["#zz", "#yy"];
var c;
$.each(q, function(key, value)
{
$(document).on('click', value, function()
{
c = (key == 0 ? -20 : 20);
$('.heads').css("width", $('.heads').width()+c);
});
});
私は以下のいずれかにコードを変更する場合しかし、それは両方のケースでの幅を増加します。ヘッド部門:
var q = ["#zz", "#yy"];
var c;
$.each(q, function(key, value)
{
c = (key == 0 ? -20 : 20);
$(document).on('click', value, function()
{
$('.heads').css("width", $('.heads').width()+c);
});
});
質問:なぜですか? $ .eachループは両方のケースで2回実行され、cは最初の反復では-20、2番目の反復では+20です。しかし、私はそれが最後のコードブロックと最初のコードブロック内(期待通りに-20または20のいずれかで、両方のケースでは20だように見えます.on機能(c)にはconsole.log場合。
論理的な問題は別として、ループは完全に冗長です。 '$(document).on(' click '、' #zz、#yy '、 fn); '要素の' data- * '属性に関連するメタデータを格納します。 –
あなたは 'javascript closure'を意味していますか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures –
彼らは正しいです。それは閉鎖によるものです。 var cを削除すると、 2行目と5行目を "var c = ...."に更新すると、再び動作するはずです。 –