Javascript 使用方括号的目的是什么?

Javascript 使用方括号的目的是什么?,javascript,angularjs,Javascript,Angularjs,我想了解MyOtherService和MyOtherComplexService声明之间的区别。特别是方括号部分的用途是什么?何时使用,何时不使用 var myapp=angular.module('myapp',[]); myapp.factory('MyService',函数($rootScope,$timeout){ 返回{ foo:function(){ 返回“MyService”; } } }); myapp.factory('MyOtherService',函数($rootScope

我想了解
MyOtherService
MyOtherComplexService
声明之间的区别。特别是方括号部分的用途是什么?何时使用,何时不使用

var myapp=angular.module('myapp',[]);
myapp.factory('MyService',函数($rootScope,$timeout){
返回{
foo:function(){
返回“MyService”;
}
}
});
myapp.factory('MyOtherService',函数($rootScope,$timeout,MyService){
返回{
foo:function(){
返回“MyOtherService”;
}
}
});
myapp.factory('MyOtherComplexService',['$rootScope','$timeout','MyService',函数($rootScope,$timeout,MyService){
返回{
foo:function(){
返回“MyOtherComplexService”;
}
} 
}]);
myapp.controller('MyController',函数($scope,MyOtherService,MyOtherComplexService){
$scope.x=MyOtherService.foo();
$scope.y=MyOtherComplexService.foo();
});

它允许缩小AngularJS代码。AngularJS使用参数名将值注入控制器函数。在JavaScript缩小过程中,这些参数被重命名为较短的字符串。通过告诉使用字符串数组将哪些参数注入函数,AngularJS在重命名参数时仍然可以注入正确的值。

要添加到:

ngmin-将标准模块编译为最小安全模块 Angular的最小安全方括号表示法显然不太方便,因为您必须将每个依赖项键入两次,并且参数顺序很重要。有一个名为的工具可以将标准模块编译为最小安全模块,因此您不必手动管理所有这些内容

角度+咖啡脚本 如果你使用咖啡脚本,情况会更糟。你可以选择ngmin,它会破坏你的源代码图,或者如果你想自己写出来,你必须用方括号把你的整个代码包起来,这太难看了

angular.module('whatever').controller 'MyCtrl', ['$scope', '$http' , ($scope, $http) ->
  # wrapped code
]
在我看来,这不是CoffeeScript的缺陷,而是Angular团队糟糕的设计决策,因为它违背了所有JS/CoffeeScript约定,不将函数作为最后一个参数。够了,这里有一个小助手函数来解决这个问题:

deps = (deps, fn) ->
  deps.push fn
  deps
这是一个非常简单的函数,它接受两个参数。第一个是包含依赖项的字符串数组,第二个是模块的函数。您可以这样使用它:

angular.module('whatever').controller 'MyCtrl', deps ['$scope', '$http'] , ($scope, $http) ->
  # unwrapped code \o/

到目前为止,ng min已被弃用。 改用

在构建作业中使用ng注释是一种很好的做法,这样在开发时就不必处理最小安全/括号表示法,因为它使代码更难阅读和维护


npm上有a和a。

只是为了举例说明已经说过的话,如果您使用以下语法:

myapp.factory('MyService', function($scope, $http, MyService) { ... });
大多数JS迷你版将其更改为:

myapp.factory('MyService', function(a, b, c) { ... });
由于函数参数名称通常可以重命名为较短的名称。这将打破角度代码

在Angular中,要使代码在所有缩微器中都可缩微,请使用括号语法:

myapp.factory('MyService', ['$scope', '$http', 'MyService', function($scope, $http, MyService) { ... }]);
将缩小到:

myapp.factory('MyService', ['$scope', '$http', 'MyService', function(a, b, c) { ... }]);
请注意,缩微器不接触字符串,因此角度会看到缩微代码并按顺序匹配参数:

$scope    = a
$http     = b
MyService = c

为了避免这种丑陋的方括号语法,您应该使用智能缩小器,如。

它用于缩小,请看:是的,它用于缩小。请参阅本angularjs教程的相关章节