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”但在函数之外 - 它是任何函数或表达式都可以访问的全局变量。

函数作用域的一个很酷的地方是,虽然在该函数之外注意可以看到变量 - 在父函数内部执行或定义的任何函数都可以。

漏洞很深 - 如果您在函数中使用变量,并且函数没有看到它在自身内部定义,它会转到其父级以查看它是否在那里定义。如果它没有找到定义 - 它会转到其父级的父级 - 依此类推,直到到达全局范围 - 如果在全局范围内找不到定义,则在全局范围内声明变量.

这是一篇关于范围界定的 Smashing Magazine 文章。

于 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 回答