arguments的主要用途是保存参数,但是他还有callee属性.

一:callee指向arguments对象的函数.

示例一:

 function calture(num) {//阶乘计算
if (num <= 1) return 1;
else {
return num * calture(num - 1);
}
}

在代码内部出现了calture的调用.这在以后的代码维护中是很不利的,如果某天把外面函数名改了,里面没有改,后果大家知道了吧.

对于这个问题可以这个样子优化的嘛:

 function calture(num) {//阶乘计算
if (num <= 1) return 1;
else {
return num * arguments.callee(num - 1);
}
}

二:caller这个属性中保存着调用当前函数的函数引用,如果是全局作用域中调用,它的值是null.

  function Me() {
You();
}
function You() {
alert(You.caller);
}
Me();

效果:

对上面的代码经行优化一下:

 function Me() {
You();
}
function You() {
alert(arguments.callee.caller);
    }
Me();

javascript callee和caller的更多相关文章

  1. 使用枚举类Enum作为callee和caller的约定,运用反射消除分支和重复代码在命令式程序中的应用

    在开发过程中,程序提供的功能由简单变得复杂,承担功能的主要类也会因此变得庞大臃肿,如果不加以维护,就会散发出浓重的代码味道.下面这篇博文,主要讲述了利用Enum,反射等手段简化重构代码的过程. 代码涉 ...

  2. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  3. JavaScript中的callee与caller的区别

    1.callee callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数 作用:就是用来指向当前对象 返回正被执行的 Function 对象,也就是所指定的 Functi ...

  4. javascript中call、apply、argument、callee、caller

    1.Call方法 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN]]]]]) thisObj 可选项.将被用作当前对象的对 ...

  5. JavaScript中callee与caller,apply与call解析

    1. arguments.callee 1.1 解释 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文. 1,.2 说明 callee 属性的初始值就是正被执行的 ...

  6. Javascript arguments.callee和caller的区别

    一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函数和调用它的函数的参数. 语法: 1 [function.]argument ...

  7. JavaScript callee caller

    caller是function的属性 callee是arguments的属性 callee:返回正在执行的函数对象. var sum = function (n) { == n) ; ); } con ...

  8. 全面理解 javascript 的 argements caller callee call apply 之caller

    /** * 演示arguments的用法,如何获取实参数和形数数 */ function argTest(a,b,c,d){ var numargs = arguments.length; // 获取 ...

  9. apply、call、callee、caller初步了解

    在javascript中这四货通常一起出现介绍,楼主记忆力实在是太差经常忘记用法,故记此文. apply和call apply和call是函数原型的一个方法,调用者的类型必须是函数.官方解释:应用某一 ...

随机推荐

  1. webstrom git 版本控制

    1.配置 2.用法

  2. Linux下C++的通用Makefile与解析

    本文给出万能Makefile的具体实现,以及对其中的关键点进行解析.所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改. 号称万能Makefile,一统江湖.我对原版的M ...

  3. matlab repmat()

    一.B = repmat(A,m,n) 将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成.B 的维数是 [size(A,1)*m, size(A,2)*n] ...

  4. SW4STM32 全局宏定义

    /************************************************************************************ * SW4STM32 全局宏 ...

  5. Gym - 101550A Artwork (并查集在线做法)

    题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...

  6. Knight Tournament 合并区间

    Hooray! Berl II, the king of Berland is making a knight tournament. The king has already sent the me ...

  7. Cannot find config.m4. Make sure that you run '/usr/local/php/bin/phpize' in the top level source directory of the module的 解决方法

    cp /php-7.1.22/ext/openssl/config0.m4 /usr/local/php/bin/config.m4

  8. 相邻行列相互影响的状态类问题(类似状压dp的搜索)(POJ3279)

    POJ3279http://poj.org/problem?id=3279 题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小将原图变为全白的策略. 这是一道对于每个格 ...

  9. LG1116 【车厢重组】

    前言 看了大家的做法,什么冒泡排序,插入排序,树状数组,线段树,都好厉害呐,我都没想出来 但我发现竟然还没有人用主席树,于是我跟大家交流一下 主席树 做法 显然我们有 \(Ans=\sum_{i=1} ...

  10. day 2 Linux Shell笔记

    ------------------------------------------------------------------- -------------------------------- ...