call, apply, bind, caller, callee解释

call: 执行一个方法,将其执行环境转换成第一个参数,后续参数为此方法的参数,call(obj, param1,...,paramX);
//情况一
var a = 1
Object.prototype.toString.call(a) //[object Number]
//情况二
var a = function(){
  return this.a
}
var b = {
  a: 1
}
a.call(b) // 1
apply:和call作用相似,后续参数以一个数组传入, apply(object, [param1,..,paramX])
var a = function(num1, num2){
    return num1 + num2 + this.initNum
}
var b = {
  initNum: 100
}
a.call(b, 1, 2) //103
a.apply(b, [1, 2]) //103
bind: 将一个函数的执行环境绑定为传入参数,返回绑定后的函数,此函数无论在哪里调用,执行环境永远为传入参数
function a(){
  return this.name
}
var b = {name:'Theo'}
var c = a.bind(b)
c() //Theo
var d = {
  name: 'hello',
  showName: c
}
d.showName() //Theo
caller:返回一个函数的引用,其实为该函数的执行环境。
//情况一
var a = function(){
  return a.caller
}
a() // 因为是在全局环境下,此处返回null

//情况二
var a = function(){
  return a.caller
}
var b = function(){
  return a()
}
b() // 因为是b的函数环境下执行caller,所以此处返回b
callee:arguments的一个属性,返回这个该函数。
var a = function(){
  return arguments.callee
}
a() //返回a的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,663评论 0 5
  • 前面的话 函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题,...
    CodeMT阅读 837评论 0 1
  • apply、call、bind apply call借用他人的函数方法 网上文章虽多,大多复制粘贴,且晦涩难懂,我...
    sponing阅读 2,054评论 2 32
  • 不想这么多废话了,自己想做的每一件事情,都要认真的思考,只有走自己不断的研究,不断的摸索,不想想到让别人的帮助,很...
    越努力的人越幸运阅读 166评论 0 0
  • 《爱的五种语言》 盖瑞·查普曼 ————————— 《爱的五种语言》第3期 日期3/20 第八章爱的语言之五:...
    YYmore阅读 196评论 0 0