2015-07-28 111 views
0

我正在学习Typescript,但我有几个问题试图理解一些事情。命名空间内的匿名函数

我看到这个代码:

module Games { 

((): void => { 

    alert(""); 
); 
})(); 
} 

但是当遵守的JavaScript我得到同样的结果,如果我将其更改为波纹管:

module Games { 

    alert(""); 
})(); 
} 

是否有任何理由,为什么我会写就像第一个例子,或者它只是错误的代码。

+0

“编译”也不是JavaScript。 –

+0

是的,它不是compliled,但是当你去Typescript的官方网页,他们说它是编译..只是想保持它一致 – Marco

+0

也它有语法错误http://codepen.io/anon/pen/XbydME –

回答

0

所以用这个工作的范例开始......

module Games { 
    ((): void => { 
     alert(""); 
    })(); 
} 

目前结束了以下结果当您编译打字稿为JavaScript - 模块变得和立即调用的函数表达式...

var Games; 
(function (Games) { 
    (function() { 
     alert(""); 
    })(); 
})(Games || (Games = {})); 

,当你的目标的ECMAScript更高版本上之后,你可能会发现其实模块有在JavaScript(因为这是该计划于EC功能只是早期访问MAScript)。

除非你有一个很好的理由要该模块内,我会建议如下调整......

module Games { 

} 

((): void => { 
    alert(""); 
})(); 

我觉得这会生存的未来变化更好。

+0

感谢您的帮助史蒂夫,我明白了。 – Marco

+0

内联模块在当前规格中被拒绝... ES –

+0

这是什么eicto? – Marco

0

在你的例子中,没有理由这样做。

更一般地说,设置一个函数会创建一个局部作用域,它允许您在其中使用变量,而其他模块无法访问它。这样可以降低模块不同部分的变量覆盖对方的风险,因为它们共享一个名称。

+0

谢谢你的解释昆汀。 – Marco