Javascript 窗口函数回调解释

Javascript 窗口函数回调解释,javascript,variables,callback,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("Fr

大家好,我遇到了这个问题

有人能解释一下这是怎么回事吗

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()不起作用,而在函数中封装后传递它才起作用


在第三个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);
这不起作用,因为此函数仅在窗口对象的上下文中起作用。现在您不是在窗口对象的上下文中调用它

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函数,然后该函数将尝试调用此函数。因为这不在窗口对象的上下文中,所以将失败

不将函数作为引用传递时: 当函数是浏览器的本机实现时,不能将函数作为参数传递给其他函数。您可以看到它是否是浏览器的一个实现,如下图所示:


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

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

function anyOther(){
    return "otherFunction";
}

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

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

myFunc("From", getLocation);
myFunc("From", anyOther);
这不起作用,因为此函数仅在窗口对象的上下文中起作用。现在您不是在窗口对象的上下文中调用它

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函数,然后该函数将尝试调用此函数。因为这不在窗口对象的上下文中,所以将失败

不将函数作为引用传递时: 当函数是浏览器的本机实现时,不能将函数作为参数传递给其他函数。您可以看到它是否是浏览器的一个实现,如下图所示:


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

因为执行此操作时:

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

myFunc
中,函数是在全局对象上调用的,而不是在
窗口上调用的。位置

因为执行此操作时:

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

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

什么是
console.log(data,func())
代码中没有
func
函数,请查看浏览器的控制台。@yash func作为myFuncTry
myFunc的参数(“From”,window.location.toString.bind(window.location));
什么是
console.log(data,func())
代码中没有
func
函数,请查看浏览器的控制台。@yash func作为myFuncTry
myFunc(“From”,window.location.toString.bind(window.location))的参数提供
很好的解释,所以这只与我调用window函数的事实有关,还有其他情况需要我处理吗?很好的解释,所以这只与我调用window函数的事实有关,还有其他情况需要我处理吗?