第四章 变量 函数和运算符

4.1 ① 变量声明

变量声明是通过var语句来完成的,并且所有的var语句都提前到包含这段逻辑的函数的顶部执行。

    function doSomething() {
var result = + value;
var value = ;
return result;
} // 编译器理解为
function doSomething() {
var result; // 这里为undefined
var value; // 这里为undefined
result = +value;
value = ;
return result;
}

变量声明提前意味着:在函数内部任意地方定义变量和在函数顶部定义变量是完全一样的。因此,一种流行的风格是将所有变量声明放在函数的顶部而不是散落在各个角落,简言之,依照这种风格写出的代码逻辑和JavaScript引擎解析这段代码的习惯是一样的。

作者还进一步推荐单var语句,每个变量的初始化独占一行,赋值运算符应当对齐(个人觉得没必要- -,并且后面的事例代码的风格也没有遵守这条),对于那些没有初始值的变量来说,他们应当出现在var语句的尾部

    // 好的声明
function doSomethingWithItems(items) {
var value = ,
result = value + ,
i,
len;
for (i=, len=items.length; i < len; i++) {
doSomething(items[i]);
} }

4.2 ② 函数声明

总是先声明函数后使用,函数声明不应当出现在语句块之内。

    // 不好的写法
doSomething(); function doSomething() {
alert("Hello world");
} // JS引擎理解为
function doSomething (){
alert("Hello world");
} doSomething();
    // 不好的写法,明确禁止
if (condition) {
function doSomething() {
alert("Hi!");
}
} else {
function doSomething() {
alert("Yo!");
}
}

 4.3 ③ 函数调用间隔

对于函数调用写法推荐的风格是,在函数名和左括号之间没有空格,这样做是为了将它和块语句(block statement)区分开来。

    // 好的写法
doSomething(item); // 不好的写法: 看起来像一个块语句
doSomething (item); // 用来作对比的块语句
while (item) {
// 代码逻辑
}

 4.4 ④ 立即调用的函数

立即调用的函数用一对圆括号包起来。

  // 好的写法
var value = (function () { //函数体 return {
message: "Hi"
}
}());

4.5 ⑤  严格模式

不推荐将"use strict"用在全局作用域中,因为这样会让文件中的所有代码都以严格模式解析,其他文件(非严格模式下的)代码很可能报错。

  // 不好的写法
"use strict"
function doSomething () {
//代码
} // 好的写法
function doSomething () {
"use strict"
// 代码
}

4.6 ⑥  相等

由于JavaScript具有强制类型转换机制(type coercion),JavaScript中的判断相等操作是很微妙的。对于某些运算来说,为了得到成功的结果,强制类型转换会驱使某种类型的变量自动转换成其他不同类型,这种情形往往会造成意想不到的结果。So,注意底下这句:

所有情形推荐使用===和!==

4.6.1 ⑦  eval

就一句话: 实在无它法时才用eval();

4.6.2 ⑧ 原始包装类型

JavaScript里有三种原始包装类型:String,Booleanl,Number。它的主要作用是:让原始值具有对象般的行为。

还是一句话:禁止使用原始包装类型。

  // 不好的做法
var name = new String("Nicholas");
var author = new Boolean(true);
var count = new Number();

理由:开发者的思路常常会在对象和原始值之间跳来跳去,这样会增加出bug的概率,从而使开发者陷入困惑。你也没有理由自己手动创建这些对象。

读《编写可维护的JavaScript》第四章总结的更多相关文章

  1. 读《编写可维护的JavaScript》第一章总结

    第一章 基本的格式化 1.4 ① 换行 当一行长度到达了单行最大的字符限制时,就需要手动将一行拆成俩行.通常我们会在运算符后换行,下一行会增加俩个层级的缩进. // 好的做法: 在运算符后换行,第二行 ...

  2. [已读]编写可维护的javascript

    13年4月份出版,作者是大名鼎鼎的Zakas,他的另两本书<javascript高级程序设计>与<高性能javascript>你一定听过或者读过. 这本书重点讲了编码风格和编码 ...

  3. 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)

    本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...

  4. 拯救一切强迫症 - 读《编写可维护的 JavaScript》(一)

    拯救一切强迫症 - 读<编写可维护的 JavaScript>(一) 本文写于 2020 年 4 月 24 日 我在小学的时候就有接触过编程,所以读大一的时候 C 语言还算是轻车熟路.自然会 ...

  5. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  6. 《编写可维护的javascript》读书笔记(上)

    最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...

  7. 编写可维护的JavaScript 收纳架

    如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...

  8. 推荐一本好书:编写可维护的JavaScript(可下载)

    目录 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 下载: 有些建议: 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 很多设计模式就是为了解决紧耦合的问题.如果 ...

  9. 《编写可维护的JavaScript》之编程实践

    最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...

  10. 编写可维护的Javascript读书笔记

    写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...

随机推荐

  1. [Core] .NET Core & VS Code 之路(2) Web API

    开发Core项目的条件 Visual Studio 2015 Update 3 .NET Core 1.0.0 - VS 2015 Tooling Preview 2 看到VS包的体积,以及不想往下走 ...

  2. Leetcode: Heaters

    Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...

  3. C++之路进阶——codevs2306(晨跑)

    2306 晨跑 2009年省队选拔赛山东  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master       题目描述 Description Elaxia最近迷恋 ...

  4. C# MD5摘要算法、哈希算法

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法) MD5算法具有以下特点: 1.压缩 ...

  5. 通什翡翠商城大站协议邮件群发系统日发20-30万封不打码不换ip不需发件箱100%进收件箱

    用一种新的技术思维去群发邮件一种不用换IP,不需要任何发件箱的邮件群发方式一种不需要验证码,不需要**代码变量的邮件群发方式即使需要验证码也能全自动识别验证码的超级智能软件教你最核心的邮件群发思维和软 ...

  6. 浅析MySQL中exists与in的使用

    exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录, ...

  7. 安装Oracle问题总结

    Oracle安装很多次,这次是最郁闷. 第一次安装失败,考虑可能是软件问题(以往学生给的软件),重新从官网下载 快下载完时,360清理电脑垃圾空间,手残,关闭浏览器,又开始重新下载 下载的同时,我开始 ...

  8. robotium重签名使用解决办法

    用re-sign重新签名,出现error,提示缺少zipalign 解决方案: 下载zipalign.exe,地址:http://pan.baidu.com/s/1geoHemR 下载后将zipali ...

  9. WebApi身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  10. netty 解决TCP粘包与拆包问题(二)

    TCP以流的方式进行数据传输,上层应用协议为了对消息的区分,采用了以下几种方法. 1.消息固定长度 2.第一篇讲的回车换行符形式 3.以特殊字符作为消息结束符的形式 4.通过消息头中定义长度字段来标识 ...