Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置全局变量并换行$(窗口)。加载_Javascript_Variables_Global - Fatal编程技术网

Javascript 设置全局变量并换行$(窗口)。加载

Javascript 设置全局变量并换行$(窗口)。加载,javascript,variables,global,Javascript,Variables,Global,我正试图设置一些Js变量来计算一些高度和偏移量,但我需要在页面加载b/c后这样做,我已经有了第三方广告加载和移动 因此,问题是: 我得到的是: var sidebarHeight = $('.sidebar').height(), sidebarOffset = $('.sidebar').offset().top; 但除非我这样做,否则这些都不会被纠正: $(window).on('load', function(){ var sidebarHeight = $('.side

我正试图设置一些Js变量来计算一些高度和偏移量,但我需要在页面加载b/c后这样做,我已经有了第三方广告加载和移动

因此,问题是:

我得到的是:

var sidebarHeight = $('.sidebar').height(),
    sidebarOffset = $('.sidebar').offset().top;
但除非我这样做,否则这些都不会被纠正:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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.load上,但仍然是全局变量,可供其他函数使用

全局声明:

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

$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});
它们的声明和设置之间没有一个值,所以其他使用它们的代码可能需要考虑这一点。但如果您需要它们位于全局范围内,则只需在全局范围内声明它们。

全局声明:

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

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

它们的声明和设置之间没有一个值,所以其他使用它们的代码可能需要考虑这一点。但是如果您需要它们在全局范围内,那么只需在全局范围内声明它们。

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

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

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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;
});
或者,只需在全球范围内声明:

var sidebarHeight, sidebarOffset;
var sidebarHeight, sidebarOffset;
$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});
<>但是,我强烈建议避免这样做,或者考虑在项目中使用一些名称间距,例如:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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;
});
或者,只需在全球范围内声明:

var sidebarHeight, sidebarOffset;
var sidebarHeight, sidebarOffset;
$(window).on('load', function(){
    sidebarHeight = $('.sidebar').height();
    sidebarOffset = $('.sidebar').offset().top;
});
<>但是,我强烈建议避免这样做,或者考虑在项目中使用一些名称间距,例如:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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;
});

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

我可以想出两种方法来实现这一点

第一条路: 您只需在globalScope上声明变量,但不指定任何值。然后,在onLoad时,将值分配给它们,如下所示:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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.sidebarHeight
window.sidebarOffset


希望能有所帮助。

我可以想出两种方法来实现这一点

第一条路: 您只需在globalScope上声明变量,但不指定任何值。然后,在onLoad时,将值分配给它们,如下所示:

$(window).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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).on('load', function(){
    var sidebarHeight = $('.sidebar').height(),
        sidebarOffset = $('.sidebar').offset().top;
});
$(window).on('load', function(){
    window.sidebarHeight = $('.sidebar').height();
    window.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;
});
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.sidebarHeight
window.sidebarOffset


希望这会有所帮助。

为什么不在全局范围中声明它们并在onLoad中填充它们呢?要实现这一点,您只需使用第一个示例,而不需要指定任务。然后,您将使用第二个示例,在没有var关键字的情况下(这只是对全局范围中声明的vars的赋值),我更喜欢显式的
窗口['sidebarHeight']=…
,但我也将全局
SIDEBAR_HEIGHT
大写;也可以代替
$(窗口)。在('load'
上,您可能需要执行
$(文档)。在(“加载”
,因为您实际上是在填充文档内容之后,而不是在打开浏览器窗口。为什么不在全局范围中声明它们并在onLoad中填充它们呢?要实现这一点,您只需使用第一个示例,而不使用赋值。然后,您将使用第二个示例,而不使用var关键字(这只是对全局作用域上声明的变量的赋值)我更喜欢显式的
window['sidebarHeight']=…
,但我也将全局
SIDEBAR\u HEIGHT
;而不是
$(window)。在('load'
上,您可能需要执行
$(文档)。on(“加载”
,因为您实际上是在填充文档内容之后,而不是在打开浏览器窗口。