前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在看对应内容的时候,把高3等工具书籍放在一边,边查边看收获很大.这章重点围绕函数的相关属性,方法,参数,关键字,命名,柯里化,高阶,闭包等内容作了各种提示.下面只是个人对于各条内容的一些总结,知识面有限,如有不对请大家一定指出.真心希望大家可以给点指导,个人写博客,感觉一直没人交流很没有动力的. 第1…
前言 第二章主要讲解各种变量作用域,通过这章的学习,接触到了很多之前没有接触过的东西,比如不经常用到的eval,命名函数表达式,with语句块等,下面是一个列表,我对各节的一点点个人总结,很多都是自己的收获和认识.可能有很多认识的误区,毕竟水平有限.如果有那里认识不对的地方,还希望可以在评论中指出来,这样可以得到大家在学习的帮助,也是很不错的. 第8条:尽量少用全局对象 个人总结: 解释全局对象在JS中定义的随意性,导致所有人都可以去定义去修改,导致命名冲突.对这样的全局对象进行依赖,导致不可知…
前言 对象是js中的基本数据结构.对象在js语言编码中也随处可见,比如经常会用到的函数,也是一个Function构造函数,Function.prototype原型对象.每当声明一个函数时,都会继承Function.prototype里的方法和属性.当使用"1,2,3".split(',')时,实际是把"123"先转化为String对象,然后调用String对象的原型方法.这些初期时只会用用,但它里面怎么去完成这些的不是很清楚.通过这章的学习,了解得更加深入了.js中…
前言 这节里其实一直都在讨论对象这个在js中的万能的数据结构.对象可以表式为多种的形式,表示为字典和数组之间的区别.更多的我觉得这章讨论多的是一些对应实现功能的相关操作,有可能出现的bug以及如何避免来修复这些bug.比如下面会说到的for...in枚举属性的操作,可能因为对原型的一些操作,最终造成数据对象的操作的破坏.对于属性顺序有要求的如何处理,对类数组如何处理等.下面再一起一条一条回顾一下,这章里的主要内容.我觉得没必要讲的会一语带过,相比前面的几章,个人觉得这章的内容重点很少,注意几点就…
前言 又到了一章的总结,这章里的内容.是把我从一个代码的使用者,如何换位成一个代码的编写者.如何让别人用自己的代码更容易,不用去注意太多的无用细节,不用记住冗长的函数名.在使用API时怎样避免使用者会出现理解的偏差.如何处理一些特殊敏感的值,参数如何设置可以更好地自说明,如何减少API对状态的依赖,如何使API更加灵活,更利于用户的编写.下面一一展开介绍,对应的也会说明每条对应希望给到的是哪方面的建议! 第53条:保持一致的约定 个人总结 不要去创造一个独特的API,要使用一些大家惯用的词汇,参…
前言 这一章的内容学到了事件队列和异步的API.js只是运行在其他应用程序的脚本语言.js即依赖于应用程序,也独立与应用程序.可以使它可以在多平台,多种环境上运行.ECMAScript标准中没有关于并发的说明.这章讨论的是一些常用的方法,使用事件和异步API是js编程的基础部分.异步API,有setTimeout,setInterval. 第61条:不要阻塞I/O事件队列 个人总结 js是构建在事件之上的单线程语言.js处理交互都以事件的方法进行传递的,监听事件的处理函数,都根据事件队列的执行相…
在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代码(面向未来编程) 合并代码时注意不同声明的严格模式(还是用第二种解决方案吧,省心) 第2条:理解JavaScript的浮点数 js的数字都是双精度的浮点数 js的整数仅仅是双精度浮点数的一个子集,不是单独的一个类型 位运算将数字视为32位的有符号整数 当心浮点运算的精度问题 第3条:当心隐式的强制…
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式传递给eval函数以达到同样的功能.程序员面临一个选择:应该将代码表示为函数还是字符串?毫无疑问,应该将代码表示为函数.字符串表示代码不够灵活的一个重要原因是:它们不是闭包. 闭包回顾 看下面这个图 js的函数值包含了比调用它们时执行所需要的代码还要多的信息.而且js函数值还在内部存储它们可能会引用…
这本书中就像它前言中说的那样,这本书不是给初学者的.需要一定的基础,而且有一定的编码实践,才能很好的理解书里讲到的内容.学习一门编程语言,需要熟悉它的语法.形式和结构,这样才会编写合法的.符合语义的.具有意义和行为正确的程序.此书的目的是加深理解如何有效地使用js构建更可预测的.可靠和可维护的js应用程序和库.所有章节都是围绕着这几块来展开的. 目录 第1章 让自己习惯JavaScript 第1条:了解你使用的js版本 第2条:理解JavaScript的浮点数 第3条:当心隐式的强制转换 第4条…
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数…
JavaScript笔记(第一章,第二章) 第一章: <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <script type="text/javascript" src="lesson2.js"></script> Lesson2.js document.write("<div s…
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //"number" typeof “s”;//"string" typeof null;//"object":ECMAScript把null描述为独特的类型,但返回值却是对象类型,有点困惑. 可以使用Object.prototype.toString.ca…
“1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaScript笔记]第3条:当心隐式的强制转换> 因为这个会在比较之前对两个值都进行隐式转换.字符串“1.0e0”被解析成1,而{valueOf:function(){return true;}}会通过调用自身的valueOf进行转化得到true,然后再转化为数字,得到1; 很容易使用强制转换完成一些工作.如…
嵌套函数声明.没有标准的方法在局部块里声明函数,但可以在另一个函数的顶部嵌套函数声明. function f(){return "global"} function test(x){ var result=[]; function f(){return "local";}//block-local if(x){ result.push(f()); } result.push(f()); return result; } test(true);//["loc…
 本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式      var 函数名 = function (参数) {     函数体 };   关键字一:arguments               获取全部参数            只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数.arguments类似Array但它不是一个Array.第一…
C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型的存储空间大小(指用了表示该类型的二进制位数)依机器而定,C++标准规定了每个算术类型的最小存储空间.实际上,大部分编译器都使用了更大的存储空间. 表2-1   C++:算术类型 类型 含义 最小存储空间 备注 整型 布尔值 bool 布尔型 -------- 字符型 char 字符型 8位 通常是…
with特性,提供的任何“便利”都更让其变得不可靠和低效率. with语句的用法,可以很方便地避免对对象的重复引用.上面的代码整理成下面的形式 function status(info){ var widget=new Widget(); with(widget){ setBackground(‘blue’); setForeground(‘white’); setText(‘Status:’+info); show() } } 使用with语句从模块对象中导入变量也很有诱惑力. functio…
变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是:只能在函数内部使用.php中的全局变量指的是:在函数外部定义,一般来说只能在函数外部被访问,不能直接在函数内部可见的变量:而局部变量指的是:在函数内部定义,只能在函数内部访问的变量.$name = "csc";function test(){ echo $name; //运行该脚本则会提示…
4.1 基本类型和引用类型的值 JavaScript变量是松散类型的,它只是保存特定值的一个名字而已. ECMAScript变量包含两种数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值.基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值:而引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,所以在操作对象时,实际上是在操作对象的引…
1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,两个变量可以参与任何操作而不会相互影响. 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中.不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象.复制操作结束…
首先JavaScript中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.参数传递 javascript中所有参数的传递都是值传递. 1.1 基本数据类型的传递(undefined ,Null,Boolean,number,String) 1--->var money = 10; 2--->var t=function (money){ money = 5; alert(money); //5 }3--->t(mon…
js支持词法作用域,即除了极少的例外,对变量的引用会被绑定到声明变量最近的作用域中. js不支持块级作用域,即变量定义的作用域并不是离其最近的封闭语句或代码块,而是包含它们的函数. 不了解这个会产生一些微妙的bug. functon isWinner(palyer,others){ var highest=0; for(var i=0,n=others.length;i<n;i++){ var palyer=others[i]; if(player.score>highest){ highes…
function wrapElements(a){ var res=[],i,n; for(i=0,n=a.length;i<n;i++){ res[i]=function(){return a[i]}; } return res; } var wrapped=wrapElements([10,20,30,40,50]); var f=wrapped[0]; f();//undefined 这个可以由之前的闭包来讲,res里的每个函数都是一个闭包,它们都可以访问上一个函数的作用域内的变量,所以每…
js函数会根据上下文改变其含义. function double(x){return x*2;} 这是一个函数声明,也可以是一个命名函数表达式(named function expression),取决于它出现的地方. 声明一个函数,并绑定一个当前作用域的变量. 同一段函数代码也可以作为一个表达式. var f=function double(x){return x*2;} 根据ECMAScript规范,该函数绑定到变量f,而不是变量double.这里给函数表达式命名并不是必要的的,可以直接使用…
迭代器(iterator)是一个可以顺序存取数据集合的对象.其一个典型的API是next方法.该方法获得序列中的下一个值. 迭代器示例 题目:希望编写一个便利的函数,它可以接收任意数量的参数,并为这些值建立一个迭代器. 测试代码好下: var it=values(1,4,1,4,2,1,3,5,6); it.next();//1 it.next();//4 it.next();//1 分析:由于values函数需要接收任意多个参数,这里就需要用到上一节讲到的构建可变参数的函数的方法.然后里面的迭…
CSVReader示例 需求 CSV(逗号分隔型取值)文件格式是一种表格数据的简单文本表示 张三,1982,北京,中国 小森,1982,东京,日本 吉姆,1958,纽约,美国 现需要编写一个简单的.可定制的读取CSV数据的类.这里的分隔符是基于逗号的,但也可以处理一些其它字符作为分隔符. 分析 构造函数需要一个可选的分隔器字符数组并构造出一个自定义的正则表达式以将每一行分成不同的条目. function CSVReader(separators){ this.separators=separat…
  5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中 执行环境的销毁 某个执行环境中的所有代码执行完毕后 该环境被销毁 保存在其中的所有变量了函数定义也会随之销毁 作用域链中的对象 全局执行环境的变更对象始终都是作用域链中的最后一个对象 没有块级作用域 if 和 for 内的变量 外部也可以访问 标记清除 不同浏览器 只不过垃圾时间的长短不同…
构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式.已经在本章讨论过的异步API使用回调函数作为参数. downloadAsync('file.txt',function(file){ console.log('file:'+file); }); 基于promise的API不接收回调函数作为参数.相反,它返回一个promise对象,该对象通过其自身的then方法接收回调函数. var p=downloadP('file.txt'); p.th…
不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之间的不同>).有时需要使用自定义接收者来调用函数,因为该函数可能并不是期望的接收者对象的属性.可以将方法作为一个新的属性添加到接收者对象中.使用如下代码: var obj={ temporary:function(a,b,c){console.log('obj')} } var f=function(a…