首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解AngularJS函数$arguments

理解AngularJS函数$arguments
EN

Stack Overflow用户
提问于 2015-04-02 05:25:11
回答 1查看 2.9K关注 0票数 4

开始进入angular.js时,我看到了一种与回调参数相关的常见模式。一个例子是ui-路由器文档

代码语言:javascript
复制
var myApp = angular.module('myApp', ['ui.router']);

myApp.config(function($stateProvider, $urlRouterProvider) {
    // Do stuff with ui-router providers
}):

但是,从我所看到的want来看,myApp.config回调的参数可能是不同的,而且它的行为仍会像预期的那样:

代码语言:javascript
复制
myApp.config(function(OtherProvider) {
    // Do stuff with provider from another service
});

myApp.config是怎么知道区别的呢?是否正在进行奇怪的魔术自省,还是有一些基本的JS概念允许这样做?例如,类似:

代码语言:javascript
复制
myApp.config = function(callback) {
    var providerNames = callback.argumentNames;
    var providers = this.findProviders(providerNames);
};

也许我太习惯于python了,在那里这种特性只有通过一些非常可怕的黑客才能实现。

EN

回答 1

Stack Overflow用户

发布于 2015-04-02 06:05:11

这基本上是javascript的一部分。Javascript在调用函数参数时非常灵活。

例如,您声明了一个函数:

代码语言:javascript
复制
 function abc (first, second) {

 } 

但是当你调用它时,即使没有零参数,你也可以传递任意数量的参数。如果您没有传递一个参数,但是在声明函数时已经定义了它,那么您将得到该特定参数的值“未定义”,但它不会中断代码的执行。

Javascript在函数中提供了一个特殊的本地数组(基本上所有东西都是JS中的对象),名为“参数”。我之所以调用“特殊”,是因为它是一个只有一个数组属性“长度”的数组,其他数组方法或属性不可用

代码语言:javascript
复制
abc(firs,second,third) 

在abc内部,我们可以检查提供的参数。

代码语言:javascript
复制
function abc (first, second) {
  var args_total = arguments.length; 
  var no_of_defined_args = Function.length;
} 

是的,Function.length是另一个属性,您可以通过它检查这个函数真正定义了多少个参数

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29405544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档