关于Javascript函数的一些思考(一)
2015-11-24 21:14
507 查看
对于我这类从传统C/C++
语言开发转到`javascript
语言的开发者。一定会对其灵活程度、易用性质感到惊叹。javascript
里万物皆对象,而函数又是其中重中之重。这里总结下最近对函数的一些思考。
1 获取函数名javascript 是一门支持函数式编程的语言,函数可以作为参数传递,也可以作为返回值返回给调用者。每个函数对象都有一个
name属性得到当前函数的名称,如果是匿名函数则返回空字符。
var func = function test() {}; console.log(func.name);//test var func2 = function() {}; console.log(func.name);//''
2 获取实参
javascript函数调用的时候实参数都被放到了一个
arguments类数组对象中。为什么说它是类数组对象呢?因为它是一个对象,只不过这个对象在使用的过程中可以被遍历数组一样遍历,从而它得到实参。
function show(a, b, c) { console.log(arguments.length);//2 for(var i = 0; i < arguments.length; i++) { console.log(arguments[i]);// 1, 2 } } show(1, 2);
3 获取形参个数、名称
形参个数:
var func = function(a, b, c) { console.log(arguments.callee.length) }; console.log(func.length);
arguments.callee表示当前函数本身
形参名称:
var func = function(a, b, c) {}; var params = /\(\s*([\s\S]*?)\s*\)/.exec(func);
解释一下上面的正则表达式:
由于形参都是包括在
function关键字后第一对括号内,所以我们首先需要定位到该括号,需要考虑参数之间的空格数量。中间花括号表示匹配任意字符(为什么不直接用
.呢?因为
.不包括换行符号)。
为什么可以直接把一个函数对象传入
exec?
原因很简单, exec会判断当前参数类型,如果不是string,则调用该参数的
toString函数。
既然知道了原理,还可以怎么写呢?
var func = function(a, b, c) {}; var str = func.toString(); var params = str.slice(str.indexOf('(')+1, str.indexOf(')')).split(/\s*,\s*/); //或者 var params2 = str.split(')')[0].split('(')[1].split(/\s*,\s*/);
相关文章推荐
- Java 6 JVM参数选项大全(中文版)
- Java简单字符串插值实现
- autoit 命令行参数说明
- 给IE加个参数 永远不怕IE主页被修改
- 写批处理必备的一些命令参数使用技巧
- ASP 调用带参数输出的COM接口
- PowerShell实现参数互斥示例
- C#从命令行读取参数的方法
- C# 正则判断一个数字的格式是否有逗号的代码
- DIV+CSS经常用到的属性、参数及说明
- C#常用正则大全分享
- asp获取URL参数的几种方法分析总结[原创]_应用技巧_脚本之家
- C#读取命令行参数的方法
- 关于C语言中参数的传值问题
- c# 方法可变数量的参数
- php正则替换处理HTML页面的方法
- MySQL slave_net_timeout参数解决的一个集群问题案例
- 用PHP连接MySQL代码的参数说明
- php的正则处理函数总结分析
- php setcookie(name, value, expires, path, domain, secure) 参数详解