专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

mysql 中查询数据库,如何在VSCode连接使用MySQL数据库_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 13:38:32       共计:3596 浏览

javascript如何获取function的形参?

作为一个每天与JavaScript打交道的前端开发,虽然明知这样的问题没人看??,但还是忍不住要答一波以正视听。

既然题主强调是“形参(形式参数,formal parameters)”,那我觉得回答说用arguments对象的肯定都不对。arguments是“实参(实际参数,actual parameters)”。

形参: 函数声明时指定的参数声明列表。实参: 函数调用时传递进来的参数列表。

有了以上的概念,再来看题主的问题“javascript如何获取function的形参”。题主其实是想做类似反射的操作,给定一个函数变量,然后得到该函数定义时的参数声明列表。

首先,如果题主并非真的想拿到每个实参的详细信息,而是只需要实参个数,那么简单的使用length属性就可以了。这个方式,对箭头函数(arrow function)也是适用的。

如果题主真的想拿到每个实参的详细信息,那就比较有意思了,因为JavaScript里目前并没有提供直接的方式来实现这个操作,甚至最新的Reflect也帮不上什么忙。好在function的toString方法可以以字符串方式返回函数定义时的代码,这就提供了一个突破口(jiu ming dao cao),可以从function的定义里自行解析出参数列表。

而这也是流行的框架AngularJS实现基于形参的依赖注入(DI)的关键。这里直接给出AngularJS里的相关代码片段。

从代码中可以看到,该方法调用了toString拿到function的定义,使用正则来去除注释并提取形参列表。该实现也同时具备处理箭头函数的能力。

可以看到,这个方法相当的高效,而且兼容性也相当不错,即使参数中存在默认值、解构、可变参数等ES6的新语法,也不会出错,但也不会给出进一步的信息。

如果需要提取参数默认值、分析解构、或者判断是否为可变参数,则需要进一步的逐个分析,这里不再展开讨论。但有个相当简便的方法是,使用JavaScript语法分析器来解析,例如esprima,但可能会有较大的性能开销(可参考https://stackoverflow.com/questions/1007981/how-to-get-function-parameter-names-values-dynamically)。

另外,如果代码经过压缩,则这种方法就失效了。Angular.js的解决方法是在需要注入的地方,接收一个手动输入的数组作为函数的参数描述(也可以通过给函数设置静态属性提供注入信息),从而不受压缩的影响。但这样增加了开发人员的工作量(每个参数列表都需要重复两遍)。因此,有人开发了叫做ng-annotate的工具,可以集成的构建工具里自动为方法添加参数描述信息。

觉得不错请转发、点赞。

欢迎在评论区留下你的观点。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:感觉互联网行业受影响比较小_数据库 | ·下一条:ios怎么把date转化为时间戳_数据库

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有