gpt4 book ai didi

javascript - 为什么我不能在 javascript 中传递这个函数?

转载 作者:行者123 更新时间:2023-11-28 18:46:40 24 4
gpt4 key购买 nike

我无法将 document.getElementById 作为参数传递:

给定这个 HTML:

<div id="el"></div>

还有这个 JavaScript:

var test = function(fn) {
alert(fn("el"));
}
// This works
test(function(id){
return document.getElementById(id);
});
// This fails
test(document.getElementById);

fiddle :
https://jsfiddle.net/joshcomley/tv7chn9q/

例如,我在 Chrome 中收到“未捕获的类型错误:非法调用”。

为什么会这样?

最佳答案

举这个例子。

var item = "This is a global variable";

var thing = {
item: "a value",
findInThing: function(prop) {
return this[prop];
}
}

alert(thing.findInThing("item"));

function call(a_func) {
return a_func("item");
}

alert(call(thing.findInThing));

函数内 this 的值取决于调用它的上下文。

您在将 getElementByIddocument 的上下文分离后调用它。

它不涉及 DOM 文档来查找元素,因此失败。

您可以创建一个新函数来包装另一个函数,然后使用绑定(bind)在特定上下文中调用它:

var myGEBI = document.getElementById.bind(document);
test(myGEBI);

关于javascript - 为什么我不能在 javascript 中传递这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com