第四章 变量 函数和运算符

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. Angular动态编译Html

    //取得scope,有时可以使用this var scope=angular.element(this).scope(); var el= $compile(html)(scope); //加入到Do ...

  2. iPhone CSS media query(媒体查询)

    iPhone5  iPhone6  iPhone6Plus iPad设备 media query(媒体查询)代码. iPhone < 5: @media screen and (device-a ...

  3. vs2010项目使用vs2013编译报错 无法打开包括文件:“winapifamily.h”

    我的老项目是vs2010下的项目.最近安装vs2013后,打开sln解决方案,调试运行报错 C:\Program Files (x86)\Windows Kits\8.0\Include\um\win ...

  4. Java:批量插入、修改数据到数据库中的用法

    在java中使用JDBC实现批处理的对象一般是使用PrepareStatement对象. 如何使用: Class.forName("Oracle.jdbc.driver.OracleDriv ...

  5. Java 动态代理作用是什么?

    Java 动态代理作用是什么?   1 条评论 分享   默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...

  6. oracle同一个数据库实例不同的用户之间的表、序列授权操作

    1.背景:用户jtuser中有jtproduct中表A,B的同义词,在用户jtuser中向表A,B插入数据,提示“权限不够” 2.将A,B表授权给jtuser用户 $ sqlplus / as sys ...

  7. css名词解释

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Android--自定义加载框

    1,在网上看了下好看的加载框,看了一下,挺好看的,再看了下源码,就是纯paint画出来的,再加上属性动画就搞定了 再来看一下我们的源码 LvGhost.java package com.qianmo. ...

  9. 创建支持eclipse的多模块maven项目

    通过maven可以创建多个关联模块的项目(Multiple Module Projects).由一个总的模块,下面包含多个子模块(子模块还可以包含子模块). 这种maven功能能支持大型的项目构建,往 ...

  10. 【转】Python练习,网络爬虫框架Scrapy

    一.概述 下图显示了Scrapy的大体架构,其中包含了它的主要组件及系统的数据处理流程(绿色箭头所示).下面就来一个个解释每个组件的作用及数据的处理过程. 二.组件 1.Scrapy Engine(S ...