多个var和附加||的函数?

时间:2016-10-10 21:29:21

标签: javascript syntax

我看着this code here并遇到了一种我不太了解的风格。我对Javascript很新,但这种声明风格让我觉得与我在各种教程中所做的完全不同。

基本上我想知道的是通过这样做完成了什么?

var Spriter;
(function (Spriter) {
    . . .
})(Spriter || (Spriter = {}));
var Spriter;
(function (Spriter) {
    . . .
})(Spriter || (Spriter = {}));
.
.
.

为什么函数卡在括号之间?什么是(Spriter = {})附加到(函数(Spriter){}做什么?为什么'var Spriter;'写了多次?我会认为多个'var Spriter'是多余的。< / p>

就这个问题而言,它允许您在Phaser(游戏引擎)中使用Spriter(一个值得在2d动画中使用骨骼的动画师套件)中创建的动画。

2 个答案:

答案 0 :(得分:5)

var Spriter; (function(Spriter){     。 。 。 })(Spriter ||(Spriter = {}));

此代码正在执行以下操作

  1. 首先检查是否定义了Spriter变量
  2. 如果Spriter定义了某个值,那么它将获取该值。
  3. 如果没有值,它会将Spriter初始化为空对象
  4. 您可以使用以下代码snipetts清楚地理解

    var Spriter;
    (function (Spriter) {
       alert(Spriter.name);
    })(Spriter || (Spriter = {"name":"xyz"}));

    var Spriter={"age":10};
    (function (Spriter) {
       alert(Spriter.name);
    })(Spriter || (Spriter = {"name":"xyz"}));

    这里Spriter不为空,它接受Spriter的值并且不显示值名称,因为Spriter对象中没有定义属性作为名称

    希望这有帮助

答案 1 :(得分:2)

当你看到类似的东西时

(function(arg1, arg2 /*, and so on*/) {
    // function body
})(param1, param2 /*, and so on*/)

在Javascript术语中,立即调用函数。这意味着您正在定义函数并立即调用它。通常,您必须声明该函数,并且必须显式调用它。例如,

function test(arg1, arg2) {
    console.log(arg1, " ", arg2);
}

要调用此函数,请执行此操作test("hello", "world");

但是使用立即调用函数语法,您可以执行

(function(arg1, arg2) {
    console.log(arg1, " ", arg2);
})("hello", "world");

会产生类似的效果

在您的示例中,函数中传递的参数为Spriter || (Spriter = {}),这意味着如果Sprinter不为null,则按原样传入Sprinter,或者如果为null,则为其分配一个空对象{},并将其传入。

相关问题