zoukankan      html  css  js  c++  java
  • js中callee与caller的区别

    callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数
    首先我们来写个阶成函数:
    function chen(x){
    if (x<=1) {
    return 1;
    } else{
    return x*chen(x-1);
    };
    };
    从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试
    function chen(x){
    if (x<=1) {return 1;
    }else{
    return x*arguments.callee(x-1);
    };
    };
    我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。

    caller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)
    先来个例子吧
    function a(){
    b();
    };
    function b(){
    alert(b.caller);
    };
    a(); //结果就是弹出函数a和内容

    我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};

    那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢
    function b(){
    alert(b.caller);
    };
    从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b
    前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:

    (function a(){
    b();
    })();

    function b(){
    alert(arguments.callee.caller);
    };
    从代码中可以看出我们用arguments.callee代替了b函数,所以解决了一下麻烦。。。。。

  • 相关阅读:
    从零开始搭建系统1.2——Nginx安装及配置
    从零开始搭建系统1.1——CentOs安装
    从零开始搭框架——系统架构
    从零开始搭建系统——前言
    PHP语法入门以及变量
    用PHP写出计算器
    PHP常量以及基本数据类型
    PHP入门了解
    php中搭建Web服务器和服务器配置
    JS中for,for...in,for...of以及foreach循环的用法
  • 原文地址:https://www.cnblogs.com/niwalala/p/5900774.html
Copyright © 2011-2022 走看看