博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js没有函数重载的原因
阅读量:5935 次
发布时间:2019-06-19

本文共 1219 字,大约阅读时间需要 4 分钟。

hot3.png

js中没有方法重载的概念:

function haha(n1,n2){  	return n1+n2;}function haha(){  	return 3;}alert(haha(2,10));alert(haha());

不管参数如何,两次都输出3,而且没有报错,原因function也是对象,haha是一个函数指针。相对于java,这点更像c#中的函数指针(嗨。。又吧js和其他语言相提并论了)。

以上代码其实等价于:

var haha = function (n1,n2){  	return n1+n2;}haha = function (){  	return 3;}alert(haha(2,10));alert(haha());

这样就明白为什么两个重名函数没有报错了,因为haha只是个指针,它指向了新的函数对象。

进一步等价为:

var haha = new Function ('n1','n2','return n1+n2;');haha = new Function ("return 3;");alert(haha(2,10));alert(haha());

这里给出了构造Function对象的方法,最后一个参数是函数体里要执行的语句,其他参数就是原来的参数;都以字符串的形式。

实际参数个数并不重要,因为Function默认有一个arguments数组对象,不管你传几个参数:

function add(n1,n2){  	for(var i in arguments){  		document.writeln(i+' = '+arguments[i]+'
'); }}document.writeln(add.length+'
');//add.length是函数期望的参数个数add(3,4,5,6,7,'abc',true);add();//也不会报错

可以在函数体中判断参数个数和类别,实现重载。不过这就是js灵活的地方,干嘛非要重载

关于函数指针这里还有一个例子:

var a = [1,3,24,'0'];a.sort();//a.sort默认是把比较元素toString()之后的字符串document.writeln(a+'
');//得到0,1,24,3 function ascent(a,b){ if(a < b){return -1;} else if(a==b){return 0;} else{return 1;}}a.sort(ascent);//把函数指针作为参数传进去 document.writeln(a+'
');//得到0,1,3,24document.writeln('0'<1);//得到true,字符串可以和数比较?js这么聪明。。无语

转载于:https://my.oschina.net/soitravel/blog/34387

你可能感兴趣的文章
Servlet实现Cookie自动登录,并显示保存的用户信息
查看>>
iOS项目质量管理自动化
查看>>
Android 记录
查看>>
html----rem结合vw布局
查看>>
Apache——DBUtils框架ResultSetHandler接口使用
查看>>
隐藏发料权限
查看>>
检查装配件属性
查看>>
H2数据库攻略
查看>>
java数组及数组的插入,删除,冒泡算法
查看>>
C# gridview分頁導出excel
查看>>
iOS多线程编程之创建线程安全(转载)
查看>>
for循环
查看>>
as3 垃圾回收机制
查看>>
command not found Operation not permitted
查看>>
Mybatis的配置文件和映射文件详解
查看>>
react 如何 阻止冒泡
查看>>
vue2.X 与 vue1.X 的区别
查看>>
nohup & 及端口查看
查看>>
ffmpeg 的log 获取办法
查看>>
rtmp流媒体协议播放遇到的坑
查看>>