有人可以解释这个变量的声明方式吗?

时间:2015-03-16 20:55:32

标签: javascript

我是javascript的新手,并尝试修改我购买的网站模板,并且我很难理解变量被声明/使用的某种方式。

模板具有动态内容功能,因为JQuery扩展声明为:

window.theme = {};

(function(theme, $) {

// function

}).apply(this, [window.theme, jQuery]);

然后在一个单独的文件中,它们被初始化,如下例所示:

(function($) {

    'use strict';

    if ($.isFunction($.fn['themePluginAnimate'])) {

        $(function() {
            $('[data-plugin-animate], [data-appear-animation]').each(function() {
                var $this = $(this),
                    opts;

                var pluginOptions = $this.data('plugin-options');
                if (pluginOptions)
                    opts = pluginOptions;

                $this.themePluginAnimate(opts);
            });
        });
    }
}).apply(this, [jQuery]);

令我困惑的是:

var $this = $(this),
    opts;

通过谷歌搜索我的理解是这种使用逗号运算符的赋值方式意味着:

$(this) = opts;
$this = $(this);

我认为opts尚未初始化,所以如何/为何将其用作作业?这个模式在每个模块上,所以我想在开始进行更改之前理解它。

我做了一些谷歌搜索,发现如果var = opt被声明,那么它就会被提升,但这只是为了声明而不是初始化。

有人能告诉我这里发生了什么事吗?

2 个答案:

答案 0 :(得分:2)

var oneThing = 1, anotherThing;

只是

的简写
var oneThing = 1;
var anotherThing;

答案 1 :(得分:1)

如果我理解正确,那么你需要解释JavaScript init变量的方式。 首先,当JavaScript读取您的代码时 - 它会在函数的开头移动所有变量:

function(){
  var a = 1;
  console.log(a);//1
  console.log(b);//undefined
  var b = 2;
}

会像这样寻找JS:

function(){
   var a,b;//first of all we declare variables.
   a = 1;
   console.log(a);// => 1
   console.log(b);// => undefined
   b = 2;
}

但是另一个函数在声明队列中具有更高的优先级,这就是为什么它们将在之前初始化:

function(){
   console.log(func)// => function(){return 1;}
   console.log(a)// => undefined
   var a = 1;
   function fun(){return 1;}
}

真正发生的事情:

function(){
   function fun(){return 1;}//first of all functions
   var a;//secondary variables

   console.log(func)// => function(){return 1;}
   console.log(a)// => undefined
   a = 1;
}

这对你来说是一个小理论,因为我认为你会在最近的将来在代码中遇到这样的事情。

现在让我们找你代码:

var $this = $(this),
    opts;

以及JavaScript如何阅读它?

var $this, opts;//declare all variables;

$this = $(this)//init variable $this

如果您对,感到困惑,那么它只是您声明的变量之间的分隔符:

var a,b,c,d;

等于:

var a;
var b;
var c;
var d;
祝你好运!