![](/img/trans.png)
[英]When writing a debounce, what is the point of fn.apply(context, args)?
[英]what does fn.apply(fn, []) do?
我有一段代码接受fn
作为参数并将其存储在object
属性中。
var obj = {};
function anotherFn(fn){
obj["name"] = fn.apply(fn, []);
}
function google(){
console.log("hello");
}
anotherFn(google);
console.log(obj.name);
我不理解的是fn.apply(fn,[])
代码及其目的。 通常我们在想要在不同的this/context
执行fn
时使用call
和apply
方法。
但是fn.apply(fn, [])
在这里做了什么? 困惑是为什么我不能这样做
obj["name"] = fn();
fn.apply(fn, [])
调用存储在功能fn
与上下文的值( this
的同时执行该功能) fn
,和其中所包含的参数[]
无参数)。
以这种方式调用apply
似乎很奇怪,因为它等同于调用fn.call(fn)
。
fn()
不是一个合适的替代品,因为fn()
将在全局上下文中执行,这意味着函数中的this
值将是window
(假设是浏览器环境)。
这是一个有用的样本,展示了它是如何不同的:
var obj = {};
function anotherFn(fn){
obj["name"] = fn.apply(fn, []);
}
function anotherFn2(fn){
obj["name"] = fn(fn, [])
}
function google() {
console.log(this.world);
}
google.world = "yay!"
anotherFn(google);
anotherFn2(google);
输出是:
yay!
undefined
jsFiddle: http : //jsfiddle.net/c56ja3jL/
根据上下文,这可能很有用。 基本思想是你总是将this
与函数本身相等,而不是全局上下文。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.