我有一个Javascript库,很遗憾,我不应对其进行更改。 有一个DOM Ready函数,我需要在其中调用一个函数,代码如下:
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!");
}
});
然后我需要从此范围之外的其他函数中调用你好:
function btnstart(){
hello();
}
我该怎么做?
答案 0 :(得分:1)
这是对您的问题的详细解释。这不是答案,我不希望它被接受。这是为了帮助您理解为什么您不能做自己要问的事情,除非您可以更改现有代码。
您面临的问题是创建一个包含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()
。如果您无法更改该内容,那么您将无法执行自己的要求。