2015年4月

JavaScript 高程设计——在HTML中使用 JavaScript

<script> 元素

HTML 4.01 为 <script> 定义了以下6个属性:

  • async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作。只对外部脚本文件有效;
  • charset:可选。表示通过 src 属性指定的代码的字符集。很少有人用这个属性;
  • defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行;
  • language:已废弃;
  • src:可选。表示包含要执行代码的外部文件;
  • type:可选。表示编写代码使用的脚本语言的内容类型;目前 type 属性的值依旧还是 text/javascript。不过这个属性并不是必须的,因为没有指定时默认值也是 text/javascript

在使用 <script> 元素嵌入 JavaScript 代码时,不要在代码中的任何地方出现 "</script>"字符串。按照接卸嵌入式代码的规则,当浏览器遇到字符串 "</script>" 时,就会认为是结束的 </script>标签。而通过转义字符 “\” 可解决这个问题:"<\/script>"。例如:

<script>
    function sayScript(){
        alert("<\/script>");
    }
</script>

在引入外部文件时,只能像下面这样写:

<script type="application/javascript" src="example.js"></script>

而不能使用如下形式:

<script type="application/javascript" src="example.js"/>

引入了外部文件的 <script> 元素不能再嵌入代码,嵌入的代码将会被忽略,只外部文件起作用。

无论如何包含代码,只要不存在 deferasync 属性,浏览器都会按照 <script> 元素在页面中出现的先后顺序对它们依次进行解析。

标签的位置

现代 Web 应用程序一般都把全部的 JavaScript 引用放在 元素中页面内容的后面。如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
</head>
<body>


<script src="example.js"></script>
</body>
</html>

延迟脚本

使用 defer 属性,相当于告诉浏览器立即下载,但延迟执行。IE4/Firefox3.5/Safari5/Chrome 是最早支持此属性的浏览器,其他浏览器会忽略此属性,因此把延迟脚本放在页面底部仍然是最佳选择。使用例子:

<script defer src="example.js"></script>

异步脚本

HTML 5 为 <script> 元素定义了 async 属性。这个属性与 defer 属性类似,都用来改变处理脚本的行为;但与 defer 属性不同的是,标记为 async 脚本并不保证按照指定它们的先后顺序执行。指定 async 属性的目的不是让页面等待两个脚本下载和执行,从而异步加载页面其他内容。因此,建议异步脚本不要在加载期间修改 DOM。异步脚本一定会在页面的 load 事件前执行。

<script async src="example.js"></script>

文档模式

IE 5.5 引入了文档模式的概念,而这个概念是通过使用文档类型(doctype)切换实现的。最初的两种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)。这两种模式主要影响 CSS 内容的呈现,但在某些情况下也会影响 JavaScript 的解释执行。在此之后,IE 又提出一种所谓的准标准模式(almost standards mode)。

如果文档开始处没有发现文档类型声明,则所有的浏览器都会默认开启混杂模式;对于标准模式可以通过使用下面任何一种文档类型来开启:

<!-- HTML 4.0.1 严格型 html:4s -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- HTML 5 !-->
<!DOCTYPE html>

而对于准标准模式,则可以使用过渡型(transitional)或框架集型(frameset)文档类型来触发:

<!-- HTML 4.0.1 过渡型 html:4t -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<!-- HTML 4.0.1 框架集型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
    "http://www.w3.org/TR/html4/frameset.dtd">

<noscript> 元素

<body> 中使用此元素。

一次让我瞬间长大的经历

原文链接

今天,我突然对人情世故、世态炎凉有了非常深刻的理解。一瞬间,觉得自己成长了许多。

一直有关注我博客的人都应该知道,因为长期编码导致我的身体吃不消了。去年年底从国企离职后就没有上班了,虽然靠着一些投资和理财收入能够勉强维持生活,但是在家还是闷得慌,得找份工作有点事做,有点人际交流。但是又不太想从事繁重的编码工作,正好政府在招聘编制人员,有比较适合我的职位(与计算机相关的,具体就不指明部门和职位了),于是我就屁颠屁颠地报考了。毕竟政府编制内的工作,轻松待遇又好,还有时间业余继续摆弄自己的项目,何乐而不为呢。

凭借着扎实的计算机功底,再稍微看看公共基础题,哥笔试从数十号报考同一职位的人中杀了出来,拿了笔试第一名,比第二名还高了 6 分多。

后来就收到面试通知,面试是结构化面试,然后就看了一些相关的书,自我感觉相当良好。今天早上面试,有另外两个人跟我竞争同一职位,就叫他们A和B吧。最初先和A交谈,A说他昨晚才收到面试通知,什么都没准备,就是裸考。然后他是粤西那边的人,带着浓重的粤西腔调,“是不是”都说成“系不系”那种水平的普通话。哥一听,稳了。B是个笑面郎君,是个湖南人,做手机游戏的。暂时不知道他什么水平。反正就一路都是笑眯眯的。

然后就开始面试了,我是这个报考职位最后一个面试。题目类型完全猜中,就是综合分析+组织管理+应急应变,哥对答如流,有首有尾,中间饱满,层次分明,逻辑清晰。走出面试考室时,哥心里想,这次真的稳了。

考完后,我走到侯分室,A和B都在那里,我问B考得怎么样,他说答了 10 分钟都没有,慌张得要命。确认这一点之后,哥心里笑了,这次真的真的稳了。于是便淡定地跟别人聊天,等待分数的公布。

等了大概二十多分钟吧,一个工作人员拿着我报考职位的分数单走过来,贴了在墙上。我信心满满地一看,但是却傻眼了…… 我面试竟然最低分,只有 75 分。而那个裸考的A是 76 分,笑面郎君B竟然高达 89 分。哥心里那个震惊,怎么成绩会这样?我自认为答得这么好,为什么成绩会比那个连普通话都说不好并且裸考的的A要低?一个好职位就这样擦肩而过了,虽然心里很不甘,但也没办法,灰溜溜地先回家了。

正好,我有个朋友跟我报考的那个局里有点门道,我觉得有点死不瞑目,于是就拜托他去打听一下。具体过程就不表了,最终真相就是,我的面试成绩被打压了。因为那个笑面郎君B正好是背后各种关系需要照顾的人,而我笔试成绩太高了,只能通过打压我的面试成绩,并且要保证,B的分数要稍微拉开我和A一定的距离,所以B的面试分数必须要那么高,而我的面试分数则必须要打压到这么低。

呵呵。

可笑,突然明白这面试其实就是形同虚设,连分数都是可以随意设置的。现在想起笑面郎君B的那副笑脸,俨然就是:呵呵,你们这两个陪考员,铁定进不去的还来跟我抢,白费工夫吧。

其实我一直都没考过这种试,也第一次参加结构化面试。但是这次我总算是懂了,面试成绩为什么要占 50%,甚至 60%,其实都是别有用心的。

哥总算经历一回了,也算死得瞑目了。所以在这里奉劝大家一句,如果你还有报考公务员、事业单位的想法,除非有好运气,除非有好背景,否则最好都别想了。那些好职位大部分应该都有预订的。顺别说一句,我那个职位,中级技术职称就能拿到大约副镇长级别的工资待遇,而且蛮轻松的。我还是太年轻了,这样的职位不早被人觊觎就怪了。

人情世故、世态炎凉。现实就是这样,我们的社会就是这样。记得大学时,一位教授跟我讲过这么一句话:

看着自己有什么样的资源,利用好这些资源就好了。不要看着别人的资源流口水,比如说不要看到人家公务员的待遇多好,你就去报考公务员。能够做官的,很快就能做官,因为别人有做官的资源。

我突然懂了。

这个社会里,没有拥有社会资源的,只能苦逼地每天辛辛苦苦地打工赚那几个辛苦钱。而有社会资源的,则在轻松的岗位上,拿着丰厚的待遇。前者就是我们通常所说的屌丝,社会中大部分没有关系、没有背景的普通劳动百姓。比如我。屌丝们只能在那些“某些群体”不屑一顾的蛋糕屑里,辛辛苦苦地劳动以分一杯羹。某些屌丝想进入“某些群体”的圈子,这个是在太难太难了,更多时候只是当当陪考员而已。

突然想起在斗鱼直播的 sol 君,他说过这么一句话:

“我做斗鱼主播的这几年可能会是我一生中最赚钱的几年了,我也不知道以后这个行业会怎么样。我不会像有些主播一样挂支付宝让大家打钱,我不会问你们要钱的,缺钱了我就去帮别人打点广告。等以后如果不做主播了,我就去卖震动棒(PS:有玩笑性质)”

sol 说,他家里只有两个房间,剩下一个房间给妹妹住了,所以他爸给他在天台搭了个房间,也就是他直播的地方。他和他家人的关系都比较一般,做主播赚的钱都要留下,希望可以买个屋子搬出去接亲生妈妈回来一起住。

这就是我们普通人的生活,普通人的梦想。未来大家都不知道,踏踏实实走好现在脚下的每一步吧。

所以,假如你没有背景、没有关系,那么只有也只能完全依靠自己了。看看自己的天赋在哪,优势在哪,资源在哪,发挥好自己的资源优势,才能够在这个人情世故的社会中活得更好一些,也能让自己爱的人活得更舒服些。

共勉吧。