我在 jQuery 中有这个函数:
$(document).ready(function(){ function MyFunction() {alert('Hello!');} });
(仅作为示例)
但是,我想用常规 Javscript 这样调用这个函数:
if(x == y){MyFunction();}
(仅作为示例)
我没工作。
但是,当我尝试时:
function MyFunction(){alert('Hello!');} if(x == y){MyFunction();}
(没有jQuery功能)
这是工作。
为什么?
如果你把函数放在 .ready() 之外并在 ready 函数中调用它,它会起作用,如果你把它放在 ready() 中并在 ready 之外调用它,它会给你一个错误,你可能有一个函数使用 jQuery 代码在就绪状态之外声明并在内部调用它。
function MyFunction(){
alert("hello!!");
}
//on ready
$(document).ready(function(){
if(x==y)
MyFunction();
});
我理解你的问题是这样的{但不太清楚你在寻找什么恕我直言}
定义函数:
function MyFunction(){alert('Hello!');}
在文档准备好后调用它:
$(MyFunction);
现在只要您愿意,您就可以使用:
if(x == y){MyFunction();}
这一行:
if(x == y){MyFunction();}
也应该出现在
document.ready
声明中。
如果您在外部调用它,它将在函数实际定义之前运行,因此会失败。
Lesonchi 说得对。问题是“范围”。
$(document).ready(...)
调用采用一个具有其自身作用域的函数(Javascript 仅具有函数作用域)。因此,您传递给该调用的函数内定义的任何内容仅在该函数内可用。
根据你的问题,我假设你希望能够在代码中的其他地方调用该
MyFunction
方法,而不仅仅是在 $(document).ready()
中 - 因此,在该调用之外定义它会赋予它“全局”范围,并且因此可以在代码中的其他地方使用:
function MyFunction(){ /* do something */ }
$(document).ready(function(){
MyFunction(); // call it in this scope
});
// call it in 'global' scope
if (x == y) {
MyFunction();
}
另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope