【问题标题】:Calling custom functions from firebug console从 firebug 控制台调用自定义函数
【发布时间】:2012-03-10 09:13:02
【问题描述】:

我创建了一个加载 .js 文档的文档,该文档具有我创建的一些 JQuery 函数。我想使用 firebug 控制台在我的 html 文档上快速测试这些函数的功能。但是当我尝试在控制台中调用这些函数时,我没有得到任何响应。

例如:

  • 我有 index.html 调用我的 JS:

    <script src="jquery.js" type"text/javascript"></script>
    <script src="myfunctions.js" type="text/javascript"></script>
    
  • Myfunctions.js 中定义了以下内容:

    function showAbout(){
      $('div#about').show("slow");
      $('.navbar #about-button').attr('disabled', true); 
    }
    

问题:

当我尝试从 index.html 上的控制台调用 showAboutshowAbout() 时,我没有得到任何更改。但是,当我直接从控制台调用 $('div#about').show("slow");$('div#about').show("slow"); 时,我得到了预期的行为。
从控制台调用用户定义函数的正确方法是什么?

【问题讨论】:

    标签: javascript jquery function console firebug


    【解决方案1】:

    如果showAbout是在全局范围内定义的,你应该可以在控制台中写showAbout();并查看结果。如果不是,那么您可能会将您的函数放在 作用域函数 中,如下所示:

    (function() {
        function showAbout() {
        }
    })();
    

    如果是这样,对你有好处,你已经避免创建全局变量/函数。但这确实意味着您无法从控制台访问这些功能,因为控制台只能访问全局范围。

    如果您想导出其中任何一个以便可以从控制台使用它们(可能只是暂时的,用于调试),您可以这样做:

    (function() {
        window.showAbout = showAbout;
        function showAbout() {
        }
    })();
    

    这明确地将showAbout 属性放在引用您的函数的全局对象(window)上。然后控制台中的showAbout();就可以工作了。

    【讨论】:

    • 为什么要将函数括在括号中,后跟另一组括号以使其正常工作? ( 函数(){ ... } )() ;
    • @Ricalsin:括号本身不是必需的,但 something 是必需的,因为我们需要帮助解析器了解它正在处理一个函数 表达式 而不是函数声明,因为您可以通过将() 放在末尾来立即调用函数表达式,但不能调用函数声明 那样。 this other question 中的更多内容以及我对此的回答。 :-)
    【解决方案2】:

    您的showAbout() 可能不在全局范围内。

    它可能被$(document).ready() 代码包装,其范围仅限于该函数。

    为了测试,您可以在下面添加...

    window.showAbout = showAbout;
    

    一旦定义了函数,您就可以从控制台调用showAbout()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2011-10-26
      • 2012-02-21
      • 2010-12-23
      • 2011-06-24
      • 2018-03-24
      相关资源
      最近更新 更多