zoukankan      html  css  js  c++  java
  • javascript执行上的一点总结

    今天在为软件工程的的作业准备的时候发现代码执行上的一些问题,暴露了我的一些缺陷,先上代码

     1 <html>
     2     <head>
     3          <script type="text/javascript">
     4           function he(){
     5         var s=document.getElementById('he').value;
     6         alert(s);}
     7          he();
     8          </script>
     9     </head>
    10     <body>
    11         <input type="button" id="he" value="click" name="he">
    12         <input type="button" id="she" value="y">
    13     </body>
    14 
    15 </html>

    这段代码在FF和chrome中执行均会产生问题,用firebug来调试,发现var s=document.getElementById('he').value;为空,一开始百思不得其解,后来调整了一下顺序改为:

     1 <html>
     2     <head>
     3         
     4     </head>
     5     <body>
     6         <input type="button" id="he" value="click" name="he">
     7         <input type="button" id="she" value="y">
     8     </body>
     9  <script type="text/javascript">
    10           function he(){
    11         var s=document.getElementById('he').value;
    12         alert(s);}
    13          he();
    14          </script>
    15 </html>

    问题得解,其根源其实是我前几天谈到过的,因为web浏览器本质上是个单线程,所以执行js代码会阻塞渲染,这个时候dom树还没建立,自然会出现为空的情况。

    按照yahoo优化网站的35条建议,要尽可能的把js代码放在代码的底部,除了可以加快渲染避免用户等待还可以防止此种情况出现。

    当然从这个也可以看出来,与操作domtree有关的,要尽可能的放在代码的底部,要等加载完了才能执行,不然就会报错。

    当然,很多人都知道,以window.load(){/js代码/}来开始,这的确一劳永逸了,但是其实是使初学者变蠢了,使他们远离了他们所写的,远离了原理。

    还有,我经常看到一些书上强调<script></script>标签要放在<head></head>内,这也加重了这种误解。

  • 相关阅读:
    Unix下5种I/O模型
    UDP/TCP拾遗
    智能指针
    YUV的数据格式
    OpenCV中RGB和HSV转换的问题
    RGB、YUV和HSV颜色空间模型
    const成员函数和mutable关键字
    设计模式--观察者模式Observer(对象行为型)
    linux备忘簿
    ctags使用详解(转载)
  • 原文地址:https://www.cnblogs.com/admos/p/4419508.html
Copyright © 2011-2022 走看看