Javascript 我的代码在$document.ready中调用,但似乎是在加载DOM之前运行的。为什么?

Javascript 我的代码在$document.ready中调用,但似乎是在加载DOM之前运行的。为什么?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我脑子里有一个脚本,如下所示: <script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script> <script> function editdoc(){ document.getElementById("editme").innerHTML = "hello world"; } $(document).r

我脑子里有一个脚本,如下所示:

<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
    function editdoc(){
        document.getElementById("editme").innerHTML = "hello world";
    }

    $(document).ready(editdoc());
</script>

函数editdoc(){
document.getElementById(“editme”).innerHTML=“hello world”;
}
$(document).ready(editdoc());
正文仅由一个正确命名的div组成

现在,当我把它传递给浏览器时,Chrome给了我一个
uncaughttypeerror:cannotsetproperty'innerHTML'的null
error

如果将此脚本移动到正文中,或者使用匿名函数,则不会发生此错误。我认为这意味着该函数是在DOM准备就绪之前执行的

表示命名函数在由$(document).ready调用时应与匿名函数的工作方式相同。这是怎么回事?

请改为:

<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
    $(document).ready(function() {
        function editdoc(){
            document.getElementById("editme").innerHTML = "hello world";
        }
        editdoc();
    });
</script>

$(文档).ready(函数(){
函数editdoc(){
document.getElementById(“editme”).innerHTML=“hello world”;
}
editdoc();
});
请改为执行以下操作:

<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
    $(document).ready(function() {
        function editdoc(){
            document.getElementById("editme").innerHTML = "hello world";
        }
        editdoc();
    });
</script>

$(文档).ready(函数(){
函数editdoc(){
document.getElementById(“editme”).innerHTML=“hello world”;
}
editdoc();
});

您正在立即调用函数,而不是传递引用。您应该在
editdoc
之后不使用
()

$(document).ready(editdoc);
您所做的是立即使用
editdoc()
调用函数,并将返回值从该函数传递到
$(document).ready()
。因此,您观察到函数立即被调用


任何时候,在函数名或定义后面加上
()
,都是在告诉JS解释器立即执行它。如果只传递函数名,则传递的是引用(如指针),传递给的函数可以稍后执行,这就是本例中所需的。

您是立即调用函数,而不是传递引用。您应该在
editdoc
之后不使用
()

$(document).ready(editdoc);
您所做的是立即使用
editdoc()
调用函数,并将返回值从该函数传递到
$(document).ready()
。因此,您观察到函数立即被调用


任何时候,在函数名或定义后面加上
()
,都是在告诉JS解释器立即执行它。如果只传递函数名,则传递的是引用(如指针),传递给的函数可以稍后执行。在本例中,这是您想要的。

脚本的问题在于您正在执行函数。应该是这样的

你应该改变这个

$(document).ready( editdoc() );
对此

$(document).ready( editdoc );

脚本的问题在于您正在执行函数。应该是这样的

你应该改变这个

$(document).ready( editdoc() );
对此

$(document).ready( editdoc );

我认为这不是一个好答案,因为它无助于解释行为,它通过创建与匿名函数具有相同作用域的命名函数来解决问题,这可能不适合我的需要。我认为这不是一个好答案,因为它无助于解释行为,它通过创建一个与匿名函数具有相同作用域的命名函数来解决这个问题,这可能不适合我的需要。