首先在这里给出上一题【简述JavaScript里的call、apply、caller、callee用法与区别】的参考回答:
call() 语法API:
fn.call(thisArg, arg1, arg2, …)
call() 作用都是改变当前作用域,即改变 this 的指向,将函数对象从初始的上下文改变为由thisArg指定的新对象。
thisArg:可选项,将被当做当前对象。如果没有thisArg,那么global对象将被用作thisArg.
arg1,arg2:可选项,将被传递方法参数序列。
apply() 语法API:
fn.apply(thisArg, [arg1,arg2,…argN])
从api上可以看出apply()区别于call()是第二个参数,apply()传入的是一个数组。
使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入,arguments是数组。
call和apply异同:
apply() 与 call() 的作用相同,都是改变当前作用域 this 指向。不同的是它们第二个参数,apply 传入的是数组,而 call 传入的是方法参数序列。
caller() 语法API:
arguments.caller()
caller返回一个对函数的引用,该函数调用了当前函数。
对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 JavaScript 程序的顶层调用的,那么 caller 包含的就是 undefined。
但根据JavaScript MDN,出于安全性的考虑,原来 arguments.caller 这个属性已被删除,现在已经用 Function.caller 来替代这个属性了,那么正确的写法应该是readBook.caller 或 arguments.callee.caller。
callee() 语法API:
arguments.callee()
在使用JavaScript写递归函数时,用arguments.callee实现递函数时会更方便。
caller和callee区别:
主要区别可以从上面demo大概看出了,官方的解释是:
callee 指向正在执行的函数(可以理解为被调用者)
caller 指向调用当前函数的函数(可以理解为调用者)
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论