【问题标题】:Calling function inside jQuery document ready准备好jQuery文档中的调用函数
【发布时间】:2024-09-23 13:50:01
【问题描述】:

在调试时,我总是使用 Firebug 并尝试调用函数并显示变量。但是,当函数或变量在 $(document).ready 中定义时,我不能。

如何访问这些变量?我可以输入命名空间之类的内容,例如document.ready.variableName,或者我怎么能看到这个?

提前谢谢你。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    全局变量和函数可以通过将它们分配为window的属性来创建:

    $(function(){
        window.foo = function foo() {
            // …
        }
    });
    

    foo() 应该在该处理程序执行后的任何地方都可以访问。

    【讨论】:

      【解决方案2】:

      如何访问这些变量?

      嗯,你不能。您在匿名函数中定义的所有内容(例如您在 $(document).ready 中使用的内容)都将作用于该匿名函数。它是私有的,外部无法访问。

      因此,如果您需要检查在其范围内定义的某些私有变量,您可以将您的 console.log 放在 $(document).ready 中。

      【讨论】:

      • 我可以像使用变量一样定义窗口函数,如“window.variableName = string”吗?
      • @KennethB,当然,由您决定变量的范围。你总是可以写 window.foo = ... 然后检查 window.foo 因为 window 对象是公共的并且代表全局范围。
      • 是的,我知道。但是我可以用函数做同样的事情吗?
      • @KennethB,当然,window.foo = function() { alert('bar'); };。然后window.foo();.
      【解决方案3】:

      这就是调试的目的。在所有主流浏览器(包括 IE)中,您都可以在 javascript 代码中设置断点。完成后,脚本会停止,您可以检查变量。

      这里有一些链接:

      【讨论】:

      • 致对我投反对票的那个人。请留下评论并说明原因。
      • 这至少没有直接回答问题。他想知道 1 - 如何访问在 .ready() 函数中声明的变量和 2 - 如果没有,他如何编写他的 JavaScript 以便他可以。这些是谈论调试的链接。根据他的问题,他很清楚 JavaScript 调试的基础知识。
      • 更正我,但我的印象是@Kenneth B 不知道如何使用断点进行调试。有时最好提供作者所要求的替代方案。对于我的情况,我很少设置全局变量来调试我的 javascript,但广泛使用调试器。在我看来,这是一种优越得多的方法,因为您可以在调用堆栈中跳转,看看每个堆栈中的状态是什么。
      • @Zero21xxx:“知道如何使用 Firebug 作为 DOM 检查器/REPL”并不意味着“知道 JS 断点”。如果实际上 OP 确实想知道如何在他准备好的处理程序中检查随机局部变量(我认为这不是解释问题的错误方式),那么这个答案表明了一种完全有效且有用的方法。
      【解决方案4】:

      这取决于您如何在.ready() 函数中声明变量。如果你做var x = "test",那么不行,它们只能在 ready 函数的范围内访问。如果您执行x="test" 之类的操作,那么它在全局范围内可用,您可以像alert(x);alert(window.x); 一样访问它

      您可能不想在 ready 函数内定义变量,但如果您尝试在 ready 函数之外使用它们。

      【讨论】:

        【解决方案5】:

        在全局范围内声明变量:

        例如

        <script type="text/javascript">
        var globalVar = null;
        $(document).ready(
        function() {
             globalVar = "This is the value";
        }
        );
        
        function TestFunc() {
            alert(globalVar);
        }
        </script>
        

        在这里,如果您在页面加载后的任何时间调用TestFunc(),您将看到在 ready() 函数中分配的值。

        【讨论】:

          【解决方案6】:

          不确定我是否完全理解了这个问题,但你不能在文档之外声明变量准备好了吗?

          var a = "bar";
          
          $(document).ready(function(){
              a = "foo";
          });
          

          如果您使用的是 firebug,您应该可以在文档就绪内调用 console.log,这可能会为您提供所需的内容。

          【讨论】:

            【解决方案7】:

            如果你有

            var x = "foo"
            $(document).ready(function(){
              alert(x); // foo
            });
            

            您可以在任何地方看到x 变量,但如果您将变量y 声明到文档就绪,它将只能在文档就绪内访问:

            var x = "foo"
            $(document).ready(function(){
              alert(x); // foo
              var y = "bar"
              alert(y); // bar
            });
            alert(y); // undefined
            

            【讨论】: