我刚刚了解了函数声明和函数表达式之间的区别。这让我想知道我是否在我的 AngularJS 代码中做对了。我正在遵循 John Papa 使用的模式,但现在它似乎与模块模式的典型 JS 方法不一致。John Papa 在他的控制器和服务中大量使用嵌套函数声明。这很糟糕吗?
有什么理由赞成这个:
var foo = (function() {
var bar = function() { /* do stuff */ };
return {
bar : bar
};
}());
foo.bar();
对此:
var foo = (function() {
return {
bar : bar
};
function bar() { /* do stuff */ };
}());
foo.bar();
我主要是一名 C# 开发人员,并且仍然习惯于 JavaScript 的所有细微差别。我更喜欢后一种方法,因为 IIFE 中的所有功能都是私有的,而顶部的显示模块模式实际上是公共部分。在 C# 类中,我总是在私有支持函数之前拥有我的公共属性和方法。但是,我意识到它在 JS 世界中可能没有那么简单。
使用后一种方法有什么隐患(如果有的话)?