在框架中使用自执行函数有什么好处,例如Angular?
我是Angular的新手,但到目前为止我的理解是基于模块的设计给出了自执行功能带来的大部分好处。我错过了什么?这只是风格问题吗?
Here is an example by Ben Nadel.我非常喜欢这种风格,但想通过这种方式编写Angular代码或者主要是样式选择来理解是否有任何收获。
答案 0 :(得分:7)
主要是,它确保您的代码不会在全局范围内声明,并且您声明的任何变量仍然在您的函数范围内。
在这种情况下,它还具有在一个地方声明运行代码所需的对象的好处。您可以在底部清楚地看到传入了angular
和Demo
个对象,而没有其他内容。如果代码没有包含在函数中,则必须扫描代码以查看依赖项。
就个人而言,我更喜欢使用像RequireJS这样的模块加载器,这有效地迫使你遵循这种模式。
答案 1 :(得分:2)
这是一个意见问题。我在自执行函数上看到的主要优点是不创建全局变量。我从来没有见过这种带角度的图案。
在您提供的示例链接上,它似乎没有任何优势。角度变量无论如何都会存在于角度应用中,因此您可以直接使用角度。并且Demo是一个模块,您可以在不使用全局范围的情况下添加控制器。
我喜欢很多自我执行的功能。但在这种情况下,我真的没有看到优势。
答案 2 :(得分:2)
Daniel,你说:"如果它主要是一种风格选择" 。 我知道javascript中的至少两个例子"代码风格"不仅是偏好问题,而且会导致不同的结果。
Semincolons是否可选?完全没有。
$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 semincolumn 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移动到特定框架或反之亦然时,独立性使代码更改变得更加流畅。最好的情况是将模块移动到角度包装器并重用它。
因此,从一种技术到另一种技术的代码传输的目的很方便。但是,正如我所相信的那样,它并没有真正针对具体的框架。