说实话,这些在平日开发用的真不是很多,一般都是面试会碰到,不过肯定也要去了解和知道,这里就简单的讲下其中的一些技巧型用法和区别。
callee
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
callee其实就是返回当前调用的函数本身,一般有以下用法:
|
|
caller
caller返回一个对函数的引用,该函数调用了当前函数。
对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。
caller就是返回当前函数的调用者,可以理解为它是被哪个函数内部调用的,那么返回的就是那个调用者的函数本身,常用的有:
|
|
需要注意的是: 在严格模式下,callee,caller都是禁止使用的,包括arguments也有部分限制。
|
|
call
call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。
call()方法就是用来改变上下文,也就是this对象,该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。常见的用法有:
|
|
apply
apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
apply()方法也是改变上下文,第一个参数同为this对象,剩下的参数和call()相反,apply()接受一个数组。常见的用法有:
|
|
bind
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
bind()方法的和call()、apply()一样都是改变上下文,其参数形式,也和call()相同,但是不同的是call()、apply()返回值是函数调用的结果,而bind()是返回函数本身,当返回的新函数被调用时,就会修改其this对象。其实这也是柯里化(currying)的实现,柯里化的优点之一就是延迟返回,bind()方法正是如此。
菜鸟学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。