我看着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动画中使用骨骼的动画师套件)中创建的动画。
答案 0 :(得分:5)
var Spriter; (function(Spriter){ 。 。 。 })(Spriter ||(Spriter = {}));
此代码正在执行以下操作
您可以使用以下代码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,则为其分配一个空对象{}
,并将其传入。