【问题标题】:Declaring javascript variables声明 JavaScript 变量
【发布时间】:2013-11-12 12:28:07
【问题描述】:

以下两种声明javascript变量的方式有什么区别?

版本 1

var shadowBox = $(this);
var startInfo = shadowBox.children('.start-info');
var originalHeight = startInfo.height();

第 2 版

var shadowBox = $(this),
    startInfo = shadowBox.children('.start-info'),
    originalHeight = startInfo.height();

我之所以这么问,是因为我在 jquery 插件中使用了第二个版本:

(function ($) {
    $.fn.setUpShadowBox = function (options) {
        options = $.extend({
            boxSpeed: 750,
            boxWidth: 998,
            boxPosition: -40,
            heightSpeed: 500,
            scrollSpeed: 750
        }, options);

        return $(this).each(function () {
            var shadowBox = $(this),
                startInfo = shadowBox.children('.start-info'),
                originalHeight = startInfo.height();

            //rest of plugin code
        });
    };
});

但是当我在类选择器上使用它时,它必须循​​环不止一次,它将变量视为全局变量,并且只使用设置的最后一个originalHeight。将其更改为声明变量的第一个版本后,我的插件按预期工作并且变量保持在其范围内。

这是为什么?

【问题讨论】:

  • 您在结尾处缺少逗号:var shadowBox = $(this)
  • 实际上,这是去年回答的,如果您查看已接受答案下方的 cmets,我没有将分号更改为逗号。不确定您从哪里得到答案,因为我在问题中显示的代码有逗号 - 除非您只是复制了接受的答案

标签: javascript global-variables scope


【解决方案1】:

你错过了第一行的逗号吗?

如果你这样做:

var shadowBox = $(this)
    startInfo = innerContainer.children('.start-info');

而不是这个:

var shadowBox = $(this),
    startInfo = innerContainer.children('.start-info');

startInfo 将成为一个全局变量。

尝试将它们全部放在同一行,看看会发生什么。

【讨论】:

  • 为了好奇,为什么失踪的昏迷 make startInfo global?
  • 因为自动插入分号,看这个:stackoverflow.com/questions/2846283/…
  • 啊,类似的错误 - 我在添加新变量时忘记将分号更改为逗号!我会接受的
  • 那么像function() {var local; global = 2;} 这样声明的变量会是全局变量吗?不明白为什么。
  • 以一种方式学到了一些东西!我越深入 JS,我发现的东西就越奇怪。
【解决方案2】:

请查看Declaring javascript variables,这将非常有用。你的问题是var shadowBox = $(this),你在那儿少了一个逗号。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2012-06-05
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多