javascript - 从全局范围访问函数内部定义的函数?

标签 javascript

长话短说,我有一个使用 jQuery 的长代码。很多文件、函数等。我们的代码中遇到问题的用户数量并不理想,因为他们安装的一些插件、工具栏等会破坏我们的 JavaScript 代码,因为 jQuery 被包含了两次,诸如此类的讨厌的东西。

我以为我可以

  1. 包含 jQuery
  2. 使用$.noConflict
  3. 然后将我的其余代码包含在以下内容之间:

.

(function($) { 
    // All of my code goes here.
})(jQuery);

我还没有检查这是否解决了我们与这些用户的问题,但它确实有效。问题是,在网站的一部分(图像上传)中,我们有一个 iframe,需要调用我们大块代码中定义的一些函数。我尝试将这些函数从这个未命名的函数调用中取出,但它本身使用了必须存在的其他函数。

关于如何从函数外部的代码访问该函数内部定义的函数(如上所示),有什么想法或解决方法吗?

谢谢!

最佳答案

您无法从“外部世界”访问函数上下文。好吧,准确地说,您可以在一些旧的 js 引擎中执行此操作,这些引擎允许访问 .__parent__ 属性,但它已经过时并且不再可用。

但是,您需要在闭包中公开一些函数,或者创建一个命名空间对象,在其中编写所有逻辑(该对象也必须在父上下文中可用)。

所以我建议类似

(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();

关于javascript - 从全局范围访问函数内部定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942346/

相关文章:

Javascript |将所选项目从列表框复制到文本区域

javascript - JSON url 无法捕获 null 错误

javascript - Gulp 任务不访问 karma.conf.js 文件

c# - 如何从另一个 .aspx 页面更新一个 .aspx 页面的 div?

javascript - Jquery lineheight 行为很奇怪

javascript - browserify/watchify 运行后触发 grunt 任务

javascript - Nodejs 中变量作用域的误解

javascript - 使用 HTML、CSS 和 JavaScript 的多平台桌面应用程序框架

javascript - 如何将 jQuery 与 seleniumexecute_script 方法一起使用?

javascript - 上传文件而不重新加载整页