初学Angular遇到了点困惑,以下面这个控制器函数为例
function hello($scope) {
$scope.name = '张三'
}
这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?
我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?
初学Angular遇到了点困惑,以下面这个控制器函数为例
function hello($scope) {
$scope.name = '张三'
}
这是个函数声明,$scope理应是形参吧?可是把$scope改为其他标识符如s就不行了。可见$scope是hello函数被调用时传入的实参。但这三行代码是函数的声明,怎么就传入实参了呢?
我大概意识到了这不是一个正常的函数声明,可能与Angular的控制器函数的绑定机制有关系?具体是怎样的?
嗯这东西写在那里就是个函数声明,形参叫什么名字是否重要完全由读的人决定,ECMAScript 标准的解析器觉得不重要(我猜),但是 Angular 自己拿 js 写了个 "js" 解析器。。。这样函数形参的名字就重要了
这种通过参数进行传递获得依赖就是AngularJS的一大特性——依赖注入的体现之一。
但为什么仅仅声明了参数就可以获得依赖?
AngularJS用
$injector
管理依赖的查询与加载,比如如果没有显示声明,
$injector
根据参数名推断依赖关系,这时候参数的顺序没什么意义。也就是说我们也可以这样声明: