Javascript 在DOM ready中调用函数
我有一个Javascript库,不幸的是我不应该改变它。 有一个DOM就绪函数,我需要在其中调用一个函数,代码如下:Javascript 在DOM ready中调用函数,javascript,html,dom,Javascript,Html,Dom,我有一个Javascript库,不幸的是我不应该改变它。 有一个DOM就绪函数,我需要在其中调用一个函数,代码如下: function ready(fn){ if (document.readyState != 'loading'){ console.log('fn called'); fn(); } else { console.log('fn loaded');
function ready(fn){
if (document.readyState != 'loading'){
console.log('fn called');
fn();
}
else {
console.log('fn loaded');
document.addEventListener('DOMContentLoaded', fn);
}
}
ready(function(){
function hello() {
console.log("hello world!");
}
});
然后我需要从这个范围之外的另一个函数调用hello,比如:
function btnstart(){
hello();
}
我怎么能做到 这是对您的问题的更详细的解释。这不是一个答案,我不希望它被接受。这是为了帮助您理解为什么不能按要求执行,除非您可以更改现有代码
您面临的问题是创建一个包含
hello()
的匿名函数,然后将其传递给另一个函数。在该匿名函数的作用域之外,hello()
不存在,因此无法访问
就拿这个例子来说
function domReady(fn) {
fn.hello();
}
domReady(function() {
function hello() {
console.log("hello");
}
});
这将创建一个匿名函数并将其传递给domReady()
,后者反过来将其引用为fn
。但是,这也会失败,因为fn
没有名为hello()
的函数。如果调用fn()
,则将创建该方法,但该方法仍仅存在于该函数中
您真正需要做的是将hello()
移出domReady()
的范围,并将其作为引用传递,如下所示
function domReady(fn) {
fn();
}
function hello() {
console.log("hello");
}
domReady(hello); // note there are no parenthesis () after hello, so it is a reference and not immediate executed
如果您可以更改,那么您可以随时调用
hello()
(在相同的范围内)。如果无法更改,则无法执行要求的操作。访问该函数的唯一方法是从其父函数的作用域返回该函数,或将其分配给某个对象引用,例如窗口
,在这种情况下,该函数将变为全局可访问函数window.hello=function hello(){console.log(“hello world!”);}
能否更改调用ready()
的代码?为什么需要在ready
内部声明hello
?这段代码也没有在ready
中调用hello
。我的问题是我无法更改ready(),在这种情况下,我必须从外部调用hello()函数。@hamed调用hello的唯一方法是在某处引用它。您不需要更改ready函数,只需要更改annonymus函数,该函数作为参数传递给ready函数以公开hello函数。当你定义hello时,就像我在第一篇评论中告诉你的那样定义它,你可以称之为hello谢谢,这个解决方案工作正常。哦,好的。我以为你除了解释之外什么都听不懂。我很高兴这有帮助:)