我正在研究一个JavaScript文件,并在其中看到一些方法被包装在jQuery函数中。任何人都可以帮我如何调用以下方法吗?我可以知道该方法包含在函数中的优点或原因是什么?以下是我的JavaScript代码示例。
JQuery的/ JavaScript的
$(document).ready(function () {
//How to invoke "testMethod" method?
$(function () {
function testMethod() {
alert("this is a test method");
}
});
});
答案 0 :(得分:3)
正如您所声明的那样,testMethod()
是一个本地函数,只能在声明它的函数作用域内使用。如果您希望它在该范围之外可调用,则需要以不同方式对其进行定义,以便在更广泛的范围内可用。
这样做的一种方法是使其成为一个全局函数:
$(document).ready(function () {
//How to invoke "testMethod" method?
$(function () {
window.testMethod = function() {
alert("this is a test method");
}
});
});
testMethod(); // available globally now
它也可以附加到全局命名空间,或者可以在更高的范围内定义,它也可以解决您的问题。如果没有具体的情况,我们无法建议哪一个是最好的,但您需要做的主要事情是更改函数的声明方式,以便在您想要调用它的范围内使用它。 / p>
P.S。为什么有一个文档就绪函数嵌套在另一个中?这不会提供额外的功能并增加不必要的复杂性此外,如果您希望全局可用,则没有理由在文档就绪处理程序中定义testMethod()
。
答案 1 :(得分:1)
其他事情:
$(document).ready(function(){...});
//is the same as
$(function(){...}}
关于你的问题,这里有可能的方法:
如果该函数是每个人都使用的某个实用函数,那么它可以在某个名称空间中对所有人使用,例如在这个函数中Utility
:
//Utility module
(function(ns){
//declaring someFunction in the Utility namespace
//it's available outside the ready handler, but lives in a namespace
ns.someFunction = function(){...}
}(this.Utility = this.Utility || {}));
$(function(){
//here in the ready handler, we use it
Utility.someFunction();
});
如果它们都存在于ready
处理程序中,并希望它由处理程序中的所有代码使用,请在处理程序的最外层声明它,以便所有嵌套范围都能看到它。
$(function(){
//declare it in the outermost in the ready handler
function someFunction(){...}
//so we can use it even in the deepest nesting
function nestedSomeFunction(){
someFunction();
}
someElement.on('click',function(){
$.get('example.com',function(){
someFunction();
});
});
nestedSomeFunction();
someFunction();
});
答案 2 :(得分:0)
您的通话需要在$(function
。
这完全取决于范围,您需要将testMethod从$(function
中删除。
您是否可以进一步解释您的要求,以便我们可以提供更好的帮助?
答案 3 :(得分:0)
进入准备好的事件:
$(document).ready(function () {
//How to invoke "testMethod" method?
var testMethod = function () {
alert("this is a test method");
}
// V0.1
testMethod();
// V0.2
$('#some_id').click(testMethod);
});
在其他方面:
myObj = {testMethod: null};
$(document).ready(function () {
//How to invoke "testMethod" method?
myObj.testMethod = function () {
alert("this is a test method");
}
});
// Something else
if( myObj.testMethod ) myObj.testMethod();