JavaScript 对象属性作实参以及实参对象的callee属性

参考自<<JavaScript权威指南 第6版>>

/*
 * 将对象属性用作实参, 从而不必记住参数的顺序.
 */
function arraycopy(from,from_start,to,to_start,length){
    for(var i=from_start,j=to_start;i<from_start+length;++i,++j){
        to[j] = from[i];
    }
}
function easycopy(args){
    arraycopy(args.from,
        args.from_start || 0, //default param
        args.to,
        args.to_start || 0,
        args.length);
}
var a = [1,2,3,4],b = [];
easycopy({from:a,to:b,length:4});
console.log(b); // [ 1, 2, 3, 4 ]

/*
 * arguments对象有 callee 和 caller属性, 在非严格模式下,
 * callee: 指代当前正在执行的函数, 非标准的属性,但是大多数浏览器都已经实现了. 在匿名函数的递归调用中很有用.
 * caller: 可以访问调用栈
 */
var fact = function(x){
    if(x <= 1)
        return 1;
    return x * arguments.callee(x-1);
}
// 这样也是可以的
var fact2 = function(x){
    if(x <= 1)
        return 1;
    return x * fact2(x-1);
}
console.log(fact(5)); // 120
console.log(fact2(5)); // 120

/* 代码自文档化, 因为js没有参数类型, 所以最好加参数注释或者取有意义的名字,如下:
 * number表示参数是数字类型的
 * ... 表示数量不限.
 */
function max(/*number...*/){};

 

转载于:https://www.cnblogs.com/roger9567/p/5039192.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值