【问题标题】:How to / can you call functions inside of another function?如何/可以在另一个函数内部调用函数?
【发布时间】:2015-07-15 16:31:09
【问题描述】:

所以我要访问的功能的基本设置是

(function (self, $) {

        function init() {
            ...
        }

        function stuff() {...
        }

        self.onload = init;
    }
})(window, jQuery);

如果可能的话,我将如何从控制台调用这些函数?比如我想做的

stuff("things");

我访问它的一个想法是完全删除包装游戏代码并自己运行 init 的函数,但我不确定如何让我的代码替换页面上已有的代码。

【问题讨论】:

  • “但我不确定如何让我的代码替换页面上已有的代码。” 你不能,因为到那时你可以选择它要删除它,代码已经被执行。 (除非你使用调试器和断点)

标签: javascript node.js function scope


【解决方案1】:

您的函数位于闭包中,您必须将它们设为全局或可从全局对象访问,以使它们可以立即从控制台访问。例如

var myprogram = (function (self, $) {

        function init() {
            ...
        }

        function stuff() {...
        }

        self.onload = init;
        return {
            stuff: stuff
        };
})(window, jQuery);

现在您可以从控制台调用myprogram.stuff()。但是,如果您不这样做是为了测试,我不会推荐这种封装中断。

您还可以使用调试器设置断点,然后从控制台调用它们,这是我的建议,请参阅下面的链接了解更多信息。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger

https://developer.mozilla.org/en-US/docs/Tools/Debugger

【讨论】:

  • 有时间我会试试这个。我很确定它会起作用。此外,我只是在编辑客户端,我不打算在封装损坏的情况下发布它。谢谢
  • 没问题,如果您认为答案正确,请标记为正确。那就是说,如果您等待尝试的时间足够公平:)
  • 我试图实现的问题是代码被引用,我不知道如何编辑它。它被引用为 那么您是否知道在客户端编辑这样的脚本的方法?
  • 你可以自己在中间使用像telerik.com/fiddler这样的代理,或者如果你只是在你的浏览器中搞乱,在脚本和monkey patch函数上设置一个断点,通过在调试器中覆盖它们.
【解决方案2】:

出于调试目的,您可以像这样将函数添加到窗口范围:

(function(self, $) {
    function stuff() {
        ...
    }
    window.stuff = stuff; // Remove this line in production
})(window, jQuery);

现在您可以从控制台调用stuff()

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多