如果函数无明确的返回值,或调用了没有参数的return 语句,那么它真正返回的值是: undefined.
JS无重载:
重载,就是同时存在两个名称相同的函数,但它们的接收参数不同或返回值不同;在JAVA中经常会遇到.但在JS中,如果同时存在两个相同的名字的函数,它不会引发错误,但它会真正使用最后一个;如:
function doit(iNum){
alert(iNum + 100);
}
function doit(iNum){
alert(iNum + 10);
}
我们执行:doit(10)时,它会alert出20;因为第二个覆盖了第一个定义.要想实现重载,必须使用下面的:argument
arguments 对象
在函数中,我们可以直接使用arguments对象,它是一个对象,但访问方式和数组一样:arguments[0]...,arguments.length;等;如:
function sayHi(){
if(arguments[0] == "bye"){
return;
}
alert(arguments[0]);
}
还可以用arguments.length来查看函数当前接收的参数的个数,如:
function howManyArgs(){
alert(arguments[0].length);
}
howManyArgs("a",4); //alert 2
howManyArgs(); //alert 0
howManyArgs(33); //alert 1
从上面的代码又可以看出:
ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数.开发者定义的函数都可以接受任意个数的参数,最多能接受25个,而且不会引发任何错误.任何遗漏的参数都会以undefined传递给函数,多俄的参数将被忽略.
用 arguments 模拟重载:
function doit(){
if(arguments.length == 1){
alert(arguments[0] + 10);
}else if(arguments.length == 2){
alert(arguments[0] + arguments[1]);
}
}
Function 类
我们用的函数,它实际上也是一个类;我们声明一个函数,就相当于创建了一个Function类的实例;Function类实例化的格式是:var funcName = new Function(arg1,arg2,....argN,functionBody);如
我们声明函数的时候用:
function funcName(arg1,arg2){
alert(arg1 + arg2);
}
这种格式来声明,但它实际上的含义是:
var funcName = new Function("arg1","arg2","alert(\"arg1\" + \"arg2\")");
但这种方式书写不方便,但让我们理解了Function类的存在.
记得上面说JS无重载的时候举的例子:
function doit(iNum){
alert(iNum + 100);
}
function doit(iNum){
alert(iNum + 10);
}
它实际上的内容是:
doit = new Function("iNum","alert(iNum + 100)");
doit = new Function("iNum","alert(iNum + 10)");
这样看起来就很容易理解为什么后面的会把前面的覆盖了.
因为Function也是一个对象,而声明的时候实际上是将该对象的指针给了函数名.所以可以将多个指针指向同一个Function.如:
var doit = new Function("iNum","alert(iNum + 10)");
var alsoDo = doit;
doit(11);
alsoDo(11);
两者效果一样;
既然知道了函数名实际上是一个对象的指针,那么我们就可以将函数名传递给其他函数,并做调用;如:
function callAnotherFunc(fnFunc,vArgs){
fnFunc(vArgs);
}
doit = new Function("iNum","alert(iNum + 10)");
callAnotherFunc(doit,10);
Function类还提供了另外一个接口:length属性,用来返回该类声明的接收参数的长度;如:
function doit(iNum){alert(iNum + 10)}
function hello(){alert("hello");}
alert(doit.length); //alert 1
alert(hello.length); //alert 0
相关推荐
3.7 函数 .........................................................62 3.7.1 理解参数......................................64 3.7.2 没有重载......................................66 3.8 小结 ...............
JavaScript重载函数实例剖析_.docx
超全面javaweb教程28天-day3_08_js的函数重载
超全面javaweb教程28天-day3_09_js的函数重载二
JS函数重载 JS函数重载
在面向对象的编程中,很多语言都支持函数重载,能根据函数传递的不同个数、类型的参数来做不同的操作,JS对它却不支持,需要我们额外做些小动作。 在JS的函数执行上下文中有一个名为arguments的有意思的变量,它以...
javascript 重载 Arguments是进行函数调用实现重载
javascript不能支持函数的重载,如下: 代码如下:[removed] function f(length) { alert(“高为:”+length); } function f(length,width) { alert(“高为:”+length+”,宽为:”+width); } ...
js中方法重载如何实现?以及函数的参数问题.docx
Uber 是 Node.js 的函数重载工具。 安装 通过运行使用 npm 安装 Uber npm install uber.js 基本用法 首先,你需要require Uber: var uber = require ( 'uber.js' ) ; 现在你只需要用 Uber 调用的大量参数验证...
JavaScript 中的函数重载为 3.9KB,压缩为 1.4KB。 提供工具来模拟大多数严格类型语言中存在的。 防止难以阅读和维护的混乱、冗长、if 语句、类型检查函数。 受和启发的样式和 API。 npm install overload-js ...
导航:| |数学脚本JS的数学库,着重于矩阵运算,非线性求解器,可视化和重载支持! var M = require ( 'math-script' ) ;M . execute ( function ( M ) { var X = M . range ( 0 , 0.1 , 10 ) ; // Create an input ...
Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括。具体概念大家可以到网上查询)。 所以Javascript是不能像其他语言一样...
在上一篇文章里,我们设计了一套能在JavaScript中描述函数重载的方法,这套方法依赖于一个叫做Overload的静态类,现在我们就来看看如何实现这个静态类。
-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 --> <a prevent="doThat"></a> <!-- 只有修饰符 --> <form v-on:submit.prevent>&...
理解JavaScript函数为何具有状态;实现JavaScript “Generics”;使用代码块;使用函数进行判断决策;实现代理、委托、mixin和重载函数;创建和测试动态内容等。后半部分则偏重于实际项目,包括实现一个完整的Ajax和...
本文主要介绍了利用JavaScript中的特殊对象arguments来模拟函数重载的解决方案,非常的实用,给需要的小伙伴参考下
说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持。 实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的设计。例如说jQuery的jQuery.extend方法,就是...
有关于JS构造函数的重载和工厂方法,对此有需要的朋友,参考一下。