7

将自执行函数与框架(例如 Angular)一起使用有什么好处?

我是 Angular 的新手,但到目前为止我的理解是基于模块的设计提供了自执行功能提供的大部分好处。我错过了什么?只是风格问题吗?

这是本纳德的一个例子。我真的很喜欢这种风格,但想了解以这种方式编写 Angular 代码是否有任何好处,或者它是否主要是一种风格选择。

4

3 回答 3

7

主要是,它确保您的代码没有在全局范围内声明,并且您声明的任何变量都保留在您的函数范围内。

在这种情况下,它还具有在一个地方声明运行代码所需的对象的好处。你可以在底部清楚地看到angularandDemo对象被传入,没有别的。如果代码未包含在函数中,则必须扫描代码以查看依赖项是什么。

就个人而言,我更喜欢使用像RequireJS这样的模块加载器,它有效地迫使你遵循这种模式。

于 2013-09-12T02:00:28.313 回答
2

这是一个意见问题。我在自执行函数上看到的主要优点是不创建全局变量。我从未见过这种有角度的图案。

在您提供的示例链接上,它似乎没有任何优势。角度变量无论如何都会存在于角度应用程序中,因此您可以直接使用角度。并且 Demo 是一个模块,您可以向其中添加控制器,而不会弄乱全局范围。

我喜欢很多自我执行的功能。但在这种情况下,我真的看不到优势。

于 2013-09-12T01:57:50.027 回答
2

丹尼尔,你说:“如果它主要是一种风格选择”。当“代码样式”不仅是偏好问题,而且会导致不同的结果时,我至少知道 javascript 中的两个示例。

分号是可选的吗?一点也不。

$scope.test = function() {
    console.log('Weird behaviour!')
} //; let us comment it

(function() {} ()); //two functions seem to be independent

等于

$scope.test = function() {
    console.log('Weird behaviour!')
}(function() {} ()); //but without semicolon they become the one

另一个与自执行函数无关的“代码风格”示例:

var x = (function() {
   return  //returns undefined
   {};
}());

alert(x);

/*
that is why, I suppose, while writing javascript code,
we put function brackets in the following "code style":

function() { //at the same line
   return { //at the same line, this style will not lose the object
   };
}
*/

代码风格的形成是由这种意想不到的结果决定的。

最后但并非最不重要的。使用自执行函数:在函数调用时创建一个闭包并将您的 vars 保持在本地。

在函数调用时创建一个闭包。这就是为什么自执行功能如此方便的原因。正如 Daniel 正确提到的那样,它是保持独立代码单元的好地方,这种模式称为模块模式。因此,当您从纯 javascript 迁移到特定框架或反之亦然时,这种独立性使代码更改更加流畅。最好的情况是将您的模块移动到一个角度包装器并重用它。

因此,便于从一种技术到另一种技术的代码传输。但是,正如我所相信的,它对于特定的框架并没有真正的意义。

于 2015-11-11T20:35:29.023 回答