设置全局变量并换入$(window).load

时间:2015-05-26 00:18:55

标签: javascript variables global

我正在尝试设置一些计算某些高度和偏移量的Js变量,但我需要在页面加载后执行此操作b / c我已经加载了第三方广告并改变了一切。

所以问题:

我得到的是:

var sidebarHeight = $('.sidebar').height(),
    sidebarOffset = $('.sidebar').offset().top;

但是除非我得到这样的话,否则这些都不会正确:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});

但问题是这些变量不是全局的 - 它们是该函数的本地变量,因此不能被其他函数重用。

那么问题:我如何设置它以便这些变量在window.load上设置,但仍然是全局的并且可被其他函数使用?

3 个答案:

答案 0 :(得分:2)

全局变量是不好的做法,应该避免!

对于您的问题,将它们设置为全局很容易。您可以将它们附加到窗口,如下所示:

$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.sidebarOffset = $('.sidebar').offset().top;
});

或者,只需在全球范围内声明:

var sidebarHeight, sidebarOffset;
$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});

但是,我强烈建议避免这种情况,并考虑在项目中使用一些名称间距,如下所示:

var MY_PROJET_NAMESPACE = MY_PROJET_NAMESPACE || {};
$(window).on('load', function(){
    MY_PROJET_NAMESPACE.sidebarHeight = $('.sidebar').height();
    MY_PROJET_NAMESPACE.sidebarOffset = $('.sidebar').offset().top;
});

这将防止全局命名空间污染(在全局范围内只有一个全局变量)

答案 1 :(得分:1)

全球宣布:

var sidebarHeight, sidebarOffset;

在本地设置:

$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});

他们在声明和设置之间不会有价值,因此使用它们的其他代码可能需要考虑到这一点。但是如果你需要它们在全球范围内,那么只需在全局范围内声明它们。

答案 2 :(得分:1)

我有两种方法可以实现这一目标。

第一种方式:   您只需在globalScope上声明变量,但不要指定任何值。然后,在onLoad上为这些值赋值,就像这样:

var sidebarHeight;
var sidebarOffset;
$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});
第二种方式(我最喜欢的):   您可以在窗口对象本身上创建一个额外的属性。由于窗口对象引用将是全局的,因此您的额外属性也将是全局的。这样做:

$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.sidebarOffset = $('.sidebar').offset().top;
});

无论您何时再次需要该值,都可以阅读window.sidebarHeightwindow.sidebarOffset

希望有所帮助。