说实话,这些在平日开发用的真不是很多,一般都是面试会碰到,不过肯定也要去了解和知道,这里就简单的讲下其中的一些技巧型用法和区别。
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()
方法正是如此。
菜鸟学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。