角度如何污染全球空间
How angular is polluting the global space?
我是 angularJS 的新手,我从 http://curran.github.io/screencasts/introToAngular/exampleViewer/开始练习 angularJS
在下面的示例中,有人说我们正在污染全局空间,但我不明白我们如何在示例 1 中污染全局空间,但在示例 2 中则没有。
例 1
<html ng-app>
<head>
<meta charset="utf-8">
<title>Angular.js Example</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<script>
function NameCtrl($scope){
$scope.firstName = 'John';
$scope.lastName = 'Smith';
}
</script>
</head>
<body ng-controller="NameCtrl">
First name:<input ng-model="firstName" type="text"/>
<br>
Last name:<input ng-model="lastName" type="text"/>
<br>
Hello {{firstName}} {{lastName}}
</body>
</html>
例 2
<html ng-app="nameApp">
<head>
<meta charset="utf-8">
<title>Angular.js Example</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script>
<script>
var nameApp = angular.module('nameApp', []);
nameApp.controller('NameCtrl', function ($scope){
$scope.firstName = 'John';
$scope.lastName = 'Smith';
});
</script>
</head>
<body ng-controller="NameCtrl">
First name:<input ng-model="firstName" type="text"/>
<br>
Last name:<input ng-model="lastName" type="text"/>
<br>
Hello {{firstName}} {{lastName}}
</body>
</html>
我现在只想用示例 1 中的示例污染全局空间。
这两个示例都将angular
添加到全局命名空间。示例 1 还将函数 NameCtrl
添加到全局命名空间,这符合污染它的条件。但是,示例 2 还向全局命名空间添加了nameApp
,因此您可以争辩说它们都同样污染了全局命名空间。但是,在示例 2 中,至少控制器未添加到全局命名空间中,因此它被认为是更好的形式。换句话说,如果要向全局命名空间添加任何内容,最好添加一个模块并使用它来添加任何控制器。实际上,如果您愿意,您甚至可以避免将模块添加到命名空间中,因此,如果您想拆分头发(并惹恼人们),您可以争辩说,如果目标是避免污染全局命名空间,则两者都不是 100% 正确的。
在示例 1 中,您声明函数的方式是可以在 js 代码中的任何位置访问它 - 但在第二个示例中,您声明它的方式是,除了通过 angular 之外,它不能在任何地方调用 - 因为您将控制器函数作为函数参数本身传入, 从而将其限制在该angular.module().controller()
功能范围内。
函数和变量的声明通常仅限于它们声明的最小范围 - 如果您在 <script>
标记的范围内命名函数,那么您是在主全局window
对象的作用域中声明它,从而"污染全局范围"。希望这有帮助。
- JavaScript名称空间和对象创建
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 具有大型几何图形的基于沙发的空间查询
- 如何使用javascript命名空间
- 正在测量全局命名空间的污染
- 如何在不污染全局命名空间的情况下共享常用的jquery函数
- 避免命名空间污染的模式
- setTimeout 而不会污染全局命名空间
- JavaScript命名空间是否被污染了
- 如何避免使用此函数污染全局命名空间
- 如何使用javascript eval防止意外的全局命名空间污染
- "控制器污染全局命名空间“;它在Angular中意味着什么
- 这意味着全局命名空间将被污染
- 为什么jquery不会污染全局命名空间
- 如果目标是避免污染全局作用域,为什么不让更多的人随机化他们的全局命名空间对象呢?
- Firefox扩展警告:JavaScript命名空间污染
- 角度如何污染全球空间
- JS: React和全局命名空间污染