html - JavaScript 这句怎么不能在 function 外面声明?
阿神
阿神 2017-04-11 09:06:12
[JavaScript讨论组]

我记得以前学的时候,只要在全局声明了变量,function 内也能用,可这里为什么出错呢?

正常情况:

<script>

    function addTextNode(text)
    {
        var newtext = document.createTextNode(text);
        var p1 = document.getElementById("p1");     //这句为什么不能定义在外面!!
        p1.appendChild(newtext);
    }

</script>

<body>
    <button onclick="addTextNode('WE CAN!');">WE CAN!</button>
    <hr/>
    <p id="p1">First line of paragraph.</p>
</body>

错误情况:

<script>
    var p1 = document.getElementById("p1");     //这句为什么不能定义在外面!!

    function addTextNode(text)
    {
        var newtext = document.createTextNode(text);
        p1.appendChild(newtext);
    }
</script>

<body>
    <button onclick="addTextNode('WE CAN!');">WE CAN!</button>
    <hr/>
    <p id="p1">First line of paragraph.</p>
</body>
阿神
阿神

闭关修行中......

全部回复(7)
大家讲道理

在执行<script>的时候,文档还没有载入完,<p id="p1">在下面,还没被载入,所以此处var p1获取不到东西。如果把这段script放到<p id="p1">的下面,就能正常工作。

PHPz

楼上的几位都说的很清楚啦,放在外面的前提要加一个 window.onload=function(){.....},因为DOM还没有ready,此时不存在P1这个节点。
写在函数里面只有被点击的时候才会执行这个函数,此时DOM已经ready了,所以可以获取到P1这个节点

PHP中文网

楼上正解,如果你要在文档头部写script你要用window.onload事件。

PHPz

放在外面的话,那一句是在script是在文档加载之前就要执行的,所以此时是找不到p的,把script放在body后面就不会报错了

巴扎黑

执行脚本的时候dom树还没渲染,找不到那个id

怪我咯

js加载是顺序加载,注意这点会少犯很多错误 ~

怪我咯

加载顺序问题

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号