《JavaScript征途》读书笔记
沐沐与此书的初次邂逅
1.JS函数的语法特性
·以匿名函数与立即执行函数的集合作为元参与表达式进行运算。
·变量函数
·函数可以当做函数参数传入
·可作其他函数的返回值返回
·运行时构造函数
2.函数作用域
·在JS中,只有函数有作用域,而对于if,for,while,switch等块结构是没有作用域的,依旧是全局变量。
3.函数闭包
·闭包由内嵌函数生成,作为长期存储的函数,把变量包裹在匿名函数中加以保护。返回值即可。
4.优化循环结构和提高循环效率
·优化结构
循环与分支经常是嵌套在一起的,可以在此进行优化。
·避免不必要的重复操作
避免资源重复使用,重复定义。
·妥善定义循环变量
能在循环内部声明的变量,就不要在外部声明,而造成系统开销。
5.标签语句作为思维标识
·使用标签语句进行有目的的跳转,给代码指路。
·break语句可以与标签语句结合,用来指示程序禁止执行之后要跳转的位置,并且以该标签语句末尾的位置为起点继续执行。[注意:break语句和标签语句的结合使用仅仅局限于一个嵌套结构内部]
6.知识犯法-throw
·语法格式:throw expression
·expression通常为Error对象或者其实例 EG:throw new Error("");
7.异常处理(try-cartch-finally)
8.临时作用域结构-with
·with(包含对象)
·简写代码的一种方法,特别是作用域链很长的时候,用于提高开发效率,但是注意,并不代表可以提高执行速度。
EG:with(o=document.getElementByTagName("input")){
o[0].value=0;
}
当然也可以改写为
var o=~;
o[0].value=0; 后者是可以提高执行速度的。
9.克隆函数
·注意事项:首字母需要大写
·以new关键字克隆
10.定义嵌套函数
·内层函数除了可以参与函数体表达式运算外,没有任何实际价值,不提倡使用。
11.实参管理器——Arguements对象
·注意:只能在内部使用,通过length获取实参个数
12.回调函数——callee属性揭秘
·通过arguements.csllee来获取当前匿名函数的引用,然后通过.length获取形参个数。
13.Arguements对象在实际中灵活应用
·增加函数灵活性,内部使用arguements运算预期结果
·检测函数传参合法性[如正则表达式]
14.诡异的call() 和apply()
call()和apply()方法本质上是将特定函数当做一个方法绑定到指定对象上并进行调用。
·语法格式: function. call( this obj, args....)
function. apply( this. obj, args)
$注意: apply()方法与call()方法本质没有特别大的区别,只不过传递参数的方式不同 ——apply()是以数组形式进行参数传递,而call()可以同时传递多个值。
☞call()和apply()方法的作用主要是,二者可以动态调用函数可以在用完之后马上删除,避免资源占用,同时可以实现更灵活的调用。
15.神奇的闭包函数
☞1.使用闭包结构能够跟踪动态环境中数据的实时变化,并即时存储
//定义普通函数f
function
f(){
//定义局部变量a,初始值为1
var a=1;
//定义一个闭包,并赋值给局部变量、
var b=function(){
//返回函数参数x
return a;}
//动态更新函数内局部变量a的值
a++;
//返回闭包结构
return b;}
var c= f();
//调用函数
alert(c());
//返回2。而不是返回1
☞2.闭包不会因为外部函数环境的注销而消失,并始终存在。
16.原型对象
☞prototype定义原型对象,扩展功能
17.引用构造器——constructor属性
☞每个对象都有一个constructor属性,用来引用自己的构造函数。
18.构造器的原型继承
☞例如:var o=Point.prototype.constructor;
alert(o==Point);
19.Object的基本方法
☞1.toString() <对象的字符串标识> 返回一个对象的字符串表示,但是返回的字符串比较灵活,它可能是一个具体的值,也可能是一个对象的类型表示。
☞2.valueOf()<对象的值> 返回的是对象的值的数据。
20.检测私有属性——hasOwnProperty()
☞对象属性的分类
#私有属性和继承属性#
->在自定义类型中,this.attr就表示对象的私有属性
->凡是构造函数的原型属性,也就是说原型对象包含的属性,都是继承属性。
21.检测原型对象——isPrototypeOf()
22.有意思的"名誉主席"——Global对象
☞eval()方法,执行字符串代码,神奇而又不太好用的函数。
23.特殊数集——哈希表
☞当我们把对象作为集合来看待时,它就是一个哈希表。关键码以字符串标识。
24.String对象的几个重要方法
☞清除字符串首尾的空格——trim()
☞清除字符串左侧空格——lTrim()
☞清除字符串右侧空格——rTrim()
☞检测特殊字符——check()
25.JSBOM对象
☞History
back()
forward()
go()
#例如,history. go(-1) == history. forward() history.go(0)相当于刷新页面
☞屏幕大小——Screen对象
availHeight 显示web浏览器的屏幕可用高度,不包括windows任务栏
availWidth 显示web浏览器的屏幕可用宽度,不包括windows的快捷方式栏