今天继续学习javascript系列教程,虽然是基础,但我觉得还是有必要用心来学习的,不要怕难,不用怕忘记,不要怕学不会。哪个高手不是从零开始的,我要坚定自己的学习信心,并且认真的走下去。虽然路途艰辛,但总会在尽头品尝到芬芳的味道。
函数是定义一次但可以调用或执行任意多次的一段js代码。函数有时会有参数,即函数被调用时指定了值的局部变量。函数常常使用这些参数来计算一个返回值,这个值也成为了函数调用表达式的值。
代码如下function box(){
alert("年龄");
}
function box(name,age){
return name+age;
}
alert(box('caibaojian',24)); //www.111cn.net
tip:当函数遇到第一个return,就会终止函数往下执行。
三:argument对象
实际上,函数体内可以通过argument对象来接收传递进来的参数。
代码如下
function box(){
return arguments[0] + '|'+arguments[1]; //得到每次参数的值
}
alert(box('caibaojian',24));
arguments对象的length属性可以得到参数的数量。
function box(){
return arguments.length;
}
alert(box(1,2,3,4,5)); 5
javascript函数没有重载功能
代码如下function box(num,a){
return num+a;
}
function box(num){
return num;
}
alert(box(5,11)); 50 重载就是根据参数,选择相同函数而参数不同的函数。
Javascript只认最后一个重名函数,根据顺序。
但是javascript却可以通过自身属性去模拟函数重载。
书上常见的比较无意义的例子,比如一个计算器函数,如果参数为两个数字,就执行加法运算。如果参数为三个数字,就执行乘法运算
这个函数大家最容易想到的实现就是
代码如下
function calculate() {
if (arguments.length == 2) {
return arguments[0] + arguments[1];
}
if (arguments.length == 3) {
return arguments[0] * arguments[1] * arguments[2];
}
}
alert(calculate(1, 3))
这个函数看起来没什么不好,但随着需求的增多,if分支就会越来越庞大,而且对应的模式也越来越难看。虽然if对于语言来说没啥不好。但我们可以考虑使用另一个策略来实现这个需求。
这就是一个新的函数重载模式。代码如下
代码如下
var map = function (arr, callback, pThis) {
var len = arr.length;
var rlt = new Array(len);
for (var i = 0; i < len; i++) {
if (i in arr) rlt[i] = callback.call(pThis, arr[i], i, arr);
}
return rlt;
}
/**
* 函数参数重载方法 overload,对函数参数进行模式匹配。默认的dispatcher支持*和...以及?,"*"表示一个任意类型的参数,"..."表示多个任意类型的参数,"?"一般用在",?..."表示0个或任意多个参数
* @method overload
* @static
* @optional {dispatcher} 用来匹配参数负责派发的函数
* @param {func_maps} 根据匹配接受调用的函数列表
* @return {function} 已重载化的函数
*/
var FunctionH = {
overload: function (dispatcher, func_maps) {
if (!(dispatcher instanceof Function)) {
func_maps = dispatcher;
dispatcher = function (args) {
var ret = [];
&nbs