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

JS 中的call,apply,bind 和 caller, callee相关推荐

  1. JavaScript中的call,apply,bind学习总结

    JavaScript 中的 call, apply, bind 这三个函数的作用和区别在各大论坛都被讨论了很多次了,但是我一直都还没来得及好好总结,这次正好看到了一个很不错的关于JavaScript ...

  2. js中call()与apply()方法

    菜鸟级别的选手,学习+意会.欢迎指正 参考文章 http://uule.iteye.com/blog/1158829 http://blog.csdn.net/myhahaxiao/article/d ...

  3. js 中call()与apply()区别与常见用途

    在JS中Function原型定义了两个方法,分别是Function.prototype.call和Function.prototype.apply. call与apply的区别 Function.pr ...

  4. JS 中 call()、apply()、bind() 的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; // 17obj.myFun() // 小张年龄 undefined 例 2 show ...

  5. JS函数方法Call Apply Bind运用

    JS 函数非继承的call和apply方法 同:call & apply 主要是用于扩展this指向,降低this作用域与函数之间的耦合度: 区别:传参差异 function.call(thi ...

  6. js中call与apply用法

    来源:http://blog.csdn.net/sunboy_2050/article/details/6592082 前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目, ...

  7. 想起温习一下JS中的this apply call arguments

    很多时候讲到语言入门,大家会认为就是要了解一下语言的语法.数据类型和常用函数.这一课对于所有的计算机专业的毕业生来说都可以自学,然而在最近的实践中(带了两个实习生自学js),我发现他们在学习js的时候 ...

  8. js中call和apply的作用和用法

    call和apply的用途是完全一样的.改变函数中this的指向: 为什么要改变this的指向呢?这个有什么用?有哪些场景呢? 首先this的指向总是在变的,this的指向是由函数执行时所在的环境决定 ...

  9. Js中 call() 与 apply() exports

    call() 调用一个对象的方法,用另一个对象替换当前对象,可以继承另外一个对象的属性 Function.call(obj[, param1[, param2[, [,...paramN]]]]); ...

  10. 复习javascript中call,apply,bind的用法

    一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...

最新文章

  1. python 内部函数传参_python中函数传参详解
  2. C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
  3. 原创:PHP内核研究:HASH表和变量
  4. gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法
  5. TCP三次握手建立连接和四次挥手关闭连接
  6. java开发区块链_使用Java语言从零开始创建区块链
  7. 14. Longest Common Prefix【leetcode】
  8. git base cli
  9. 《OpenGL超级宝典》第一章:3D图形和OpenGL简介
  10. 软考-计算机系统知识整理
  11. 计算机体系结构和计算机组成哪个重要,计算机组成和体系结构教学初探.doc
  12. python自己制作视频_你还在为看电影发愁?Python制作全网视频播放工具!
  13. IOS越狱运行Linux,iOS 13.4.1 Linux 简易越狱,重启就能打开
  14. iPhone内存溢出——黑白苹果
  15. 下载NVIDIA官方驱动教程
  16. 火狐浏览器不兼容event问题
  17. 白话解读“中台”技术
  18. 如何将高版本的CAD文件转成低版本的CAD文件
  19. Python计算程序运行时间秒级/毫秒级的两种方法datetime和time
  20. 微信小程序开发之『侧边栏滑动』特效

热门文章

  1. RocketMQ 下载、安装与 单机启动
  2. windows10防Linux,用户禁用Defender提升Win10 Linux子系统性能
  3. 小D课堂 - 新版本微服务springcloud+Docker教程_4-06 Feign核心源码解读和服务调用方式ribbon和Feign选择...
  4. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_7_等待唤醒机制需求分析...
  5. jmeter 分布式注意事项
  6. opencart修改网站顶部电话联系方式
  7. WPF设计の画刷(Brush)
  8. 2017.5.12PM
  9. UITableView 删除cell
  10. SSIS常用的包—通用的属性