Javascript 从全局范围访问函数中定义的函数?
长话短说,我有一个使用jQuery的长代码。很多文件、函数等等。我们的代码有问题的用户数量不太理想,因为他们安装的一些插件、工具栏等破坏了我们的JavaScript代码,因为jQuery被包含了两次,以及类似的令人讨厌的东西 我想我可以Javascript 从全局范围访问函数中定义的函数?,javascript,Javascript,长话短说,我有一个使用jQuery的长代码。很多文件、函数等等。我们的代码有问题的用户数量不太理想,因为他们安装的一些插件、工具栏等破坏了我们的JavaScript代码,因为jQuery被包含了两次,以及类似的令人讨厌的东西 我想我可以 包含jQuery 使用$.noConflict 然后将我的代码的其余部分包含在以下内容中: 我还没有检查这是否解决了我们与这些用户之间的问题,但它确实有效。问题是,在站点的一部分(图像上传)中,我们有一个iframe,它需要调用我们大量代码中定义的一些函数。我
谢谢 为什么要将代码包装在对jQuery函数对象的调用中,并将其传递给自动执行的匿名函数;您是否打算从所有代码中创建jQuery对象 为了向外界公开代码,需要将函数和对象分配给代码范围之外的对象,例如窗口对象 例如,如果您创建了一个包含要公开的各种方法和属性的对象,则可以执行以下操作:
//Your self-executing anonymous function
(function($)
{
//Object which contains various useful methods and properties
var useful = {...};
//Expose it to the outside world
window.Useful = useful;
})(jQuery);
编辑:正如其他人所指出的,这不是一个理想的解决方案,因为如果不小心,您确实会遇到命名冲突。另外,使用匿名函数外部的对象作为名称空间对象(如其他人所述)是我的首选方法为什么要将代码包装在对jQuery函数对象的调用中,并将其传递给自动执行的匿名函数;您是否打算从所有代码中创建jQuery对象 为了向外界公开代码,需要将函数和对象分配给代码范围之外的对象,例如窗口对象 例如,如果您创建了一个包含要公开的各种方法和属性的对象,则可以执行以下操作:
//Your self-executing anonymous function
(function($)
{
//Object which contains various useful methods and properties
var useful = {...};
//Expose it to the outside world
window.Useful = useful;
})(jQuery);
编辑:正如其他人所指出的,这不是一个理想的解决方案,因为如果不小心,您确实会遇到命名冲突。另外,使用匿名函数外部的对象作为名称空间对象(如其他人所述)是我的首选方法这不是一种理想的做法,但您可以在全局范围内声明这些函数
(function($) {
globalFunct = function (arg1, arg2) { // Don't use var keyword
...
};
})(jQuery);
这并不理想,因为您可能会遇到命名冲突,就像您使用jQuery观察到的那样。通过将所有全局可访问的方法放在一个“包”中来改进这种方法。为它选择一个唯一的名称。这将防止碰撞
// Somewhere outside of your anonymous function, in the global scope
var myPackage = {};
(function($) {
myPackage.globalFunct = function (arg1, arg2) {
...
};
})(jQuery);
然后通过调用
myPackage.globalFunct()
调用该方法这不是一种理想的做法,但您可以在全局范围内声明这些函数
(function($) {
globalFunct = function (arg1, arg2) { // Don't use var keyword
...
};
})(jQuery);
这并不理想,因为您可能会遇到命名冲突,就像您使用jQuery观察到的那样。通过将所有全局可访问的方法放在一个“包”中来改进这种方法。为它选择一个唯一的名称。这将防止碰撞
// Somewhere outside of your anonymous function, in the global scope
var myPackage = {};
(function($) {
myPackage.globalFunct = function (arg1, arg2) {
...
};
})(jQuery);
然后通过调用myPackage.globalFunct()调用该方法。是的,您可以从闭包中“导出”函数:
是的,您可以从闭包中“导出”函数:
(function() {
function a() {
console.log("a");
}
function b() {
a();
console.log("b");
}
// make b globally available
window.b = b;
})();
b();
是的,您可以从闭包中“导出”函数:
是的,您可以从闭包中“导出”函数:
(function() {
function a() {
console.log("a");
}
function b() {
a();
console.log("b");
}
// make b globally available
window.b = b;
})();
b();
您无法从“外部世界”访问函数上下文。好吧,可以在一些旧的js引擎中实现,这些引擎允许访问。\uuuuu parent\uuuuuu
属性,但这已经过时了,不再可用
但是,您需要在闭包中公开一些函数,或者创建一个名称空间对象,在其中写入所有逻辑(也必须在父上下文中可用)
所以我建议像
(function( $ ) {
function myFunc() {
// do stuff
}
function anotherFunc() {
}
window.myFunc = myFunc; // expose myFunc globally
}( jQuery ));
也许更好:
var myNameSpace = { };
(function( $ ) {
myNameSpace.myFunc = function() {
// do stuff
};
}( jQuery ));
// somewhere else
myNameSpace.myFunc();
您无法从“外部世界”访问函数上下文。好吧,可以在一些旧的js引擎中实现,这些引擎允许访问。\uuuuu parent\uuuuuu
属性,但这已经过时了,不再可用
但是,您需要在闭包中公开一些函数,或者创建一个名称空间对象,在其中写入所有逻辑(也必须在父上下文中可用)
所以我建议像
(function( $ ) {
function myFunc() {
// do stuff
}
function anotherFunc() {
}
window.myFunc = myFunc; // expose myFunc globally
}( jQuery ));
也许更好:
var myNameSpace = { };
(function( $ ) {
myNameSpace.myFunc = function() {
// do stuff
};
}( jQuery ));
// somewhere else
myNameSpace.myFunc();
然后在全局函数中使用PARTY\u CATS\u jQuery
如果你觉得“派对猫”这个名字不够独特,那就选一个更安全的名字,比如“婴儿杀手”
然后在全局函数中使用PARTY\u CATS\u jQuery
如果你觉得“派对猫”这个名字不够独特,那就选择一些更安全的名字,比如“婴儿杀手”
PS-你的匿名函数有点多余。您只需要:(函数($){var mycode=“goes here”;})(jQuery)
.PS-您的匿名函数中有一些额外的错误。您只需要:(函数($){var mycode=“goes here”;})(jQuery)代码>。