2

初期位置とウィンドウのサイズを変更するときに、フッターをウィンドウのすぐ下に配置したい。関数を機能させるには、関数の外側と内側で var を宣言する必要があります。大丈夫ですか、それとももっと良い方法がありますか?

$(function(){

    // initial position:    
    var docHeight = $(window).height();
    $('#footer').css('margin-top', docHeight + 'px');

    // position when I resize the window:
    $(window).resize(function() { 
    var docHeight = $(window).height();
        $('#footer').css('margin-top', docHeight + 'px');
    });

})

ここに再生するコードがあります: http://jsfiddle.net/dWpp5/

4

2 に答える 2

2

JavaScriptには「関数スコープ」があります。あなたが言ったように、「var」キーワードで変数を定義すると、それが内部にある関数ブロックに対してローカルになります。その機能の外にあるものはそれを見ることができません。

ただし、「var」を使用して変数を定義しない場合、または「var」を関数の外で使用する場合は、関数または式がアクセスできるグローバル変数です。

関数スコープの優れた点は、その関数の外側に注意しながら、変数を参照できることです。親関数の内部で実行または定義されたすべての関数が参照できます。

穴は深くなります-関数で変数を使用し、関数がそれ自体の内部で定義されているのを認識しない場合、親に行き、そこで定義されているかどうかを確認します。定義が見つからない場合は、親の親に移動します。グローバル スコープに到達するまで、というように繰り返されます。グローバル スコープで定義が見つからない場合、変数はグローバル スコープで宣言されます。 .

スマッシング マガジンのスコーピングに関する記事を次に示します。

于 2012-11-19T16:00:27.453 に答える
1

これも同様に機能します。

$(function(){

    // initial position:    
    // this is a variable local to the doc ready function
    var docHeight = $(window).height();
    $('#footer').css('margin-top', docHeight + 'px');

    // position when I resize the window:
    $(window).resize(function() { 
        // since this function is contained within the outer function, 
        // the docHeight local from the outer scope is accessible here.
        $('#footer').css('margin-top', docHeight + 'px');
    });
})

// Here, however, docHeight is NOT accessible.
于 2012-11-19T15:49:59.403 に答える