声明javascript变量

时间:2013-11-12 12:28:08

标签: javascript global-variables scope

以下两种声明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。一旦我将其更改为声明变量的第一个版本,我的插件按预期工作,变量保持在其范围内。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

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

如果你这样做:

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

而不是:

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

startInfo将成为全局变量。

尝试将它们放在同一条线上,看看会发生什么。

答案 1 :(得分:0)

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