开始进入angular.js时,我看到了一种与回调参数相关的常见模式。一个例子是ui-路由器文档
var myApp = angular.module('myApp', ['ui.router']);
myApp.config(function($stateProvider, $urlRouterProvider) {
// Do stuff with ui-router providers
}):但是,从我所看到的want来看,myApp.config回调的参数可能是不同的,而且它的行为仍会像预期的那样:
myApp.config(function(OtherProvider) {
// Do stuff with provider from another service
});myApp.config是怎么知道区别的呢?是否正在进行奇怪的魔术自省,还是有一些基本的JS概念允许这样做?例如,类似:
myApp.config = function(callback) {
var providerNames = callback.argumentNames;
var providers = this.findProviders(providerNames);
};也许我太习惯于python了,在那里这种特性只有通过一些非常可怕的黑客才能实现。
发布于 2015-04-02 06:05:11
这基本上是javascript的一部分。Javascript在调用函数参数时非常灵活。
例如,您声明了一个函数:
function abc (first, second) {
} 但是当你调用它时,即使没有零参数,你也可以传递任意数量的参数。如果您没有传递一个参数,但是在声明函数时已经定义了它,那么您将得到该特定参数的值“未定义”,但它不会中断代码的执行。
Javascript在函数中提供了一个特殊的本地数组(基本上所有东西都是JS中的对象),名为“参数”。我之所以调用“特殊”,是因为它是一个只有一个数组属性“长度”的数组,其他数组方法或属性不可用
abc(firs,second,third) 在abc内部,我们可以检查提供的参数。
function abc (first, second) {
var args_total = arguments.length;
var no_of_defined_args = Function.length;
} 是的,Function.length是另一个属性,您可以通过它检查这个函数真正定义了多少个参数
https://stackoverflow.com/questions/29405544
复制相似问题