JavaScript: 取得 function 的所有参数名

简介: 在阅读 promisify-node 源码的时候, 想看看作者是如何将基本的函数和对象转换为对应的 promised-based API 的。我很快意识到他们通过函数的签名来查找通用的回调参数名称, 如 callback 或者 cb。

在阅读 promisify-node 源码的时候, 想看看作者是如何将基本的函数和对象转换为对应的 promised-based API 的。我很快意识到他们通过函数的签名来查找通用的回调参数名称, 如 callback 或者 cb。代码看起来有点古怪但确实很有效。【注: 新一代的JS框架大多采用这种探测策略,如 AngularJS

我写了一个 JavaScrip t函数来解析函数的参数名称, 代码如下:

function getArgs(func) {
  // 先用正则匹配,取得符合参数模式的字符串.
  // 第一个分组是这个:  ([^)]*) 非右括号的任意字符
  var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];

  // 用逗号来分隔参数(arguments string).
  return args.split(",").map(function(arg) {
    // 去除注释(inline comments)以及空格
    return arg.replace(/\/\*.*\*\//, "").trim();
  }).filter(function(arg) {
    // 确保没有 undefined.
    return arg;
  });
}

上面是检测的函数, 示例代码如下:

function myCustomFn(arg1, arg2,arg3) {
  // ...
}

// ["arg1", "arg2", "arg3"]
console.log(getArgs(myCustomFn)); 

正则表达式(regular expression) 是个好东西吗? 别的我不知道, 但在适当的场景用起来还是很给力的!

附带一个Java取得当前函数名的方法: Java 在函数中获取当前函数的函数名

// 注意: stacktrace里面的位置;
// [1] 是“getMethodName”, [2] 是调用此方法的method 
public static String getMethodName() {  
    StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();  
    StackTraceElement e = stacktrace[2];  
    String methodName = e.getMethodName();  
    return methodName;  
}  

原文链接: Detect Function Argument Names with JavaScript

原文日期: 2015年10月21日

翻译日期: 2015年10月26日

翻译人员: 铁锚 http://blog.csdn.net/renfufei

目录
相关文章
|
8月前
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
169 73
|
12月前
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误
【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误
|
10月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
296 63
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
97 4
JavaScript基础知识-函数的参数
|
12月前
|
JavaScript 前端开发
JavaScript 函数参数
JavaScript 函数参数
83 3
|
JavaScript 前端开发
一个js里可以有多少个async function,如何用最少的async function实现多个异步操作
在 JavaScript 中,可以通过多种方法实现多个异步操作并减少 `async` 函数的数量。
|
12月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
273 0
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
165 0
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
189 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient