你好伙计们遇到了这个问题
有人能解释我这是如何运作的吗?
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()内联不起作用并在将它包装到函数中后传递它
答案 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,请查看它是否是浏览器的实现:
window.Object.assign
是一个由浏览器实现的函数,因此我们不能将其作为函数参数传递并期望它能够工作。
答案 1 :(得分:1)
因为当你这样做时:
myFunc("From", window.location.toString);
在myFunc
内,在全局对象上调用该函数,而不是window.location