javascript - 设置全局变量并包装在 $(window).load 中

标签 javascript variables global

我正在尝试设置一些 Js 变量来计算一些高度和偏移量,但我需要在页面加载后执行此操作,因为我已经加载了第 3 方广告并进行了移动。

所以问题是:

我得到的是:

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

但是除非我像这样得到它们,否则这些不会被设置正确:

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

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

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

最佳答案

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

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

$(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;
});

这将防止全局 namespace 污染(全局范围内只有一个全局变量)

关于javascript - 设置全局变量并包装在 $(window).load 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447604/

相关文章:

c - 将 'extern const' 替换为 'static const' 会影响性能吗?

javascript - bootstrap datetimepicker 获取日期

javascript - 快速服务器并发

javascript - jQuery 响应式横幅自动调整图像和内容的大小以适应空间

javascript - Sequelize.js:获取多对多连接模型的关联

Javascript 对象和 jQuery AJAX

php - 在 PHP 中, "final static"和 "const"有什么区别?

php - 打印 PHP 中 select 语句的值

cakephp:在哪里放置Configure::write在app_controller中?

javascript - 全局变量 - AJAX jQuery