窗口函数回调说明

时间:2018-05-03 12:17:50

标签: javascript variables callback

你好伙计们遇到了这个问题

有人能解释我这是如何运作的吗?

function anyOther(){
    return "otherFunction";
}

function getLocation() {
    return window.location.toString();
}

function myFunc(data, func) {
    console.log(data, func());
}

myFunc("From", getLocation);
myFunc("From", anyOther);
myFunc("From", window.location.toString);

为什么传递window.location.toString()内联不起作用并在将它包装到函数中后传递它

https://jsfiddle.net/w9jhdzm7/

2 个答案:

答案 0 :(得分:1)

在第三个myfunc调用中,您传递的是窗口对象的函数。

function anyOther(){
    return "otherFunction";
}

function getLocation() {
    return window.location.toString();
}

function myFunc(data, func) {
    console.log(data, func());
}

myFunc("From", getLocation);
myFunc("From", anyOther);

这不起作用,因为此功能仅适用于窗口对象的上下文。现在你不是在窗口对象的上下文中调用它。

myFunc("From", window.location.toString);

这是因为您将函数的引用传递给myFunc函数,然后myFunc函数尝试调用此函数。因为这不在窗口对象的上下文中,所以会失败。

何时不传递函数作为参考:

当函数是浏览器的本机实现时,您无法将函数作为参数传递给另一个函数。如果您可以看到native code,请查看它是否是浏览器的实现:

enter image description here

window.Object.assign是一个由浏览器实现的函数,因此我们不能将其作为函数参数传递并期望它能够工作。

答案 1 :(得分:1)

因为当你这样做时:

myFunc("From", window.location.toString);

myFunc内,在全局对象上调用该函数,而不是window.location