Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery文档准备好函数声明了吗?_Javascript_Jquery - Fatal编程技术网

Javascript Jquery文档准备好函数声明了吗?

Javascript Jquery文档准备好函数声明了吗?,javascript,jquery,Javascript,Jquery,我想知道为什么下面的代码在根据文档执行相同操作时会有不同的工作方式。 第一个例子: <script> $( document ).ready(function() { document.write("And what?"); }); </script> 它实际上覆盖了页面上的所有内容,只返回什么?。。。。 第二个例子: <script> $( document ).ready(test()); functi

我想知道为什么下面的代码在根据文档执行相同操作时会有不同的工作方式。

第一个例子:

<script>
    $( document ).ready(function() {
        document.write("And what?");
    });
</script>
它实际上覆盖了页面上的所有内容,只返回什么?。。。。 第二个例子:

<script>
    $( document ).ready(test());

    function test() {
        document.write("And what?");
    }
</script>
<script>
    $( document ).ready(test);

    function test() {
        document.write("And what?");
    }
</script>
它实际上返回页面的内容,包含什么?在它的末尾,它确实附加了文本,但为什么?! 这两个函数之间有什么区别?如何使用Yahoo YUI获得相同的示例?

文档准备和文档写入不是一回事:

document.ready是一个jQuery事件,将在DOM加载完成后触发。 write是JavaScript的本机函数,它将通过作为参数发送的值覆盖页面的所有内容

您显示的两个代码之间的区别在于,在第一个代码中,您将函数作为param发送,在第二个代码中,您将函数的结果作为param发送,因为您在包含大括号时调用test

因此,在代码中,问题在于1在DOM就绪后调用函数,2在调用函数时执行函数

为了在两个代码中获得相同的结果,在第二个示例中,当您将测试函数作为param发送时,应该删除大括号:

<script>
    $( document ).ready(test());

    function test() {
        document.write("And what?");
    }
</script>
<script>
    $( document ).ready(test);

    function test() {
        document.write("And what?");
    }
</script>
除此之外,您得到的两个结果是因为document.write的工作方式很奇怪。请查看,这解释了发生这种情况的原因。

如果在文档加载完成后调用document.write,浏览器将清除当前页面并启动一个新的空白页面。这就是它的工作原理。因此:

<script>
    $( document ).ready(function() {
        document.write("And what?");
    });
</script>
您将得到与上面相同的结果

相反,当您这样做时:

<script>
    $( document ).ready(test());

    function test() {
        document.write("And what?");
    }
</script>
您立即调用test,而不是等待文档准备就绪,然后将未定义的返回值传递给$document.ready


要传递函数引用以便以后调用,只传递函数名,后面不带paren。如果在名称后面加上paren,则指示JS解释立即执行函数并传递返回结果。如果只传递函数名,则传递的是函数引用,该函数可在以后调用。

如果使用$document.readytest;在不调用test的情况下,它与我作为参数发送的内容有什么区别,因为在这两种情况下它都应该等待doom加载,所以在这两个示例中它都应该覆盖页面。如何使用ready函数附加它对我来说只是一个谜…@pit_ns No,因为1在加载DOM之后执行,2在加载DOM之前执行。第二个代码没有发送函数,因为param只是在执行它。不管怎样,您得到的结果很奇怪,但却是文档编写的工作方式。查看doc@pit\ns除了doc write行为之外,您还需要了解的是,这两种代码都有一点重要的区别。如果我在第二种情况下等待doom加载,这有关系吗?如果我只是写:函数测试{document.writeandwhat?;}test;这与第二个例子的效果不一样吗?@pit_ns是的,这很重要,如果你等待DOM,你将得到与1相同的结果。如果你在旁边写什么,你将得到与现在2时完全相同的结果。这是因为对已加载的文档使用document.write将自动执行document.open以清除DOM。文档说明了如何处理这个问题。