博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 中的call,apply,bind 和 caller, callee
阅读量:5173 次
发布时间:2019-06-13

本文共 1276 字,大约阅读时间需要 4 分钟。

1  call,apply,bind都是Function里面原生支持的方法,是JavaScript引擎内在实现的,每个Function的实例都有这三个属性。

    call() 和 apply() 的用法很相似,只是调用的时候传递参数的方式有些区别:
    call():function.call(object, arg1,arg2...),
    apply():function.apply(object, [arg1,arg2,...]),apply方法传递的是一个参数数组,所以有时候直接传个 arguments 就可以。
    注:这里的object就是该function里面的this,这也是js一个神奇的地方,可以随意修改一个方法的this。

2  bind 跟call,apply的区别是:call,apply都是立刻执行的,不能用于函数申明或绑定事件里面。

    比如说 dom.onclick = function.apply(object, [......]) 这种方式是要报错的。解决的办法就是使用 bind,bind的用法:
    dom.onclick = function.bind(object)。因为bind返回的是一个函数引用,所以只需要传递一个function调用时,绑定的对象即可,不再传递该函数调用时    需要的实参。

 3 caller 和 callee

           (1)caller 返回的是一个调用了该函数的函数,即是一个函数的引用。caller属性只有在函数执行时才有定义。
function callerDemo() {
    if ( callerDemo.caller) {
        var a= callerDemo.caller.toString();
        console.log(a);
    } else {
        console.log("this is a top function");
    }
}
function handleCaller() {
    callerDemo();
}
callerDemo();   // 输出的是handleCaller这个函数的引用
 (2)callee 返回正在被执行的函数对象,调用方法:[function.]arguments.callee,该属性经常被用于递归。需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。
arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。
var sum = function(n){
    if(n <= 0){
        return 1;
    }else{
        return n  + arguments.callee(n - 1);    
        // return n + sum(n - 1);
    }
}

转载于:https://www.cnblogs.com/zyc-undefined/archive/2013/04/27/3153220.html

你可能感兴趣的文章
VC Dimension -衡量模型与样本的复杂度
查看>>
android 中 ViewPager 的平常用法 ViewPager+ Views
查看>>
POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang
查看>>
ZOJ 1654 二分匹配基础题
查看>>
【玩转Ubuntu】02. Ubuntu上搭建Android开发环境
查看>>
[蓝桥杯][2017年第八届真题]小计算器(模拟)
查看>>
dede上怎么让所有链接在新窗口打开
查看>>
关于PHP性能优化(转)
查看>>
浙江理工2015.12校赛-F Landlocked
查看>>
一步步学习微软InfoPath2010和SP2010--第四章节--处理SP列表表单(1)--SP列表基础...
查看>>
golang AES/ECB/PKCS5 加密解密 url-safe-base64
查看>>
我是如何用两个星期解决了本来需要两个月而且维护成本巨大的功能(解决思路与方法)...
查看>>
Chapter 2. Overview gradle概览
查看>>
OpenGL的编程环境搭建
查看>>
/etc/fstab 参数详解及如何设置开机自动挂载
查看>>
unity 解决ScrollRect嵌套滚动问题
查看>>
Android Studio安装与配置
查看>>
当前凌晨时间戳
查看>>
mongodb 限制ip访问
查看>>
direction:rtl demo
查看>>