模块模式中的函数声明与函数表达式[重复]

问题描述 投票:0回答:1

我刚刚了解了函数声明和函数表达式之间的区别。这让我想知道我的 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 世界可能并不那么一成不变。

使用后一种方式有哪些隐患(如果有的话)?

javascript iife module-pattern
1个回答
8
投票

两种方法之间没有功能差异,只是风格上的差异。

JavaScript 解释器无论如何都会无形地将函数声明从后一种样式“提升”到嵌套函数的顶部 - 如果没有,

return
块将引用未定义的函数。

© www.soinside.com 2019 - 2024. All rights reserved.