闭包
作用域的好处是内部函数可以访问定义它们的外部函数的参数和变量(除了this和arguments)。
当调用 o 时,返回一个包含addVal和getVal的新对象,该对象的引用保存在 oo 中。虽然 o 返回了,但是 oo 的addVal和getVal有访问 val 的特权,它们可以访问被创建时所处的上下文,这就是闭包。
模块
可以使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态与实现的函数或对象。
具体见『作用域』部分-模块模式
三、继承
当一个函数对象被创建时,Function 构造器产生的函数对象会运行类似这样的代码:
this.prototype = {constructor: this}
每个函数都会得到一个 prototype 对象,其值是包含一个 constructor 属性且属性值为该新函数对象。该 prototype 对象是存放继承特征的地方。
四、数组

区分数组和对象
一个常见的错误是在须使用数组时使用了对象,在须使用对象时使用了数组。其实规则很简单:当属性名是小而连续的整数时,用数组,否则就用对象。
JavaScript中数组 typeof 返回是 object,这并不能区分数组和对象。
首先,我们判断这个值是否为真,我们不接受 null 和其他为假的值。
其次,我们判断这个值的 typeof 运算结果是否是 object 。对于对象、数组和null来说,将得到 true。
第三,我们判断这个值是否有一个值为数字的 length 属性,对于数组是 true ,对于对象则为 false
第四,判断这个值是否包含一个 splice 方法。对于数组,返回 true
最后,我们判断 length 属性是否是可枚举的
这真的很复杂,实际上,我一直是这样用的,什么类型都能检测,堪称万能:
五、方法
Array
concat(item...)
返回一个新数组,并不会修改原数组
join(separator)
把一个 array 构造成一个字符串,并用 separator 作为分隔符把它们连接在一起。
pop(item...)
移除数组中最后一个元素并返回该元素
push(item...)
将一个或多个元素添加到数组尾部,会修改原数组
reverse()
反转数组中元素的顺序,会修改原数组,返回当前数组
shift()
移除数组中第一个元素
slice(start,end)
从start开始,到end为止(不包括end,可选,默认值是length)复制数组
sort(comparefn)
对数组中的内容排序,并不能给数字排序,因为默认比较函数是假定要被排序的元素都是字符串。
比较函数接受两个参数,并且如果两个参数相等返回0,如果第一个参数应该排在前面,则返回一个负数,如果第二个参数应该排在前面,则返回一个正数。js两个数组合并
splice(start,deleteCount,item...)
splice 从数组中移除一个或多个元素,并用新的item代替他们。
start是从数组中移除元素的开始位置,deleteCount是要移除的个数。
会修改原数组,返回一个包含被移除元素的数组。
deleteCount 为0时,则为添加新元素:
deleteCount 与 item的个数相等时,则为替换:
unshift(item...)
将item从数组头部插入数组
Function
apply(thisArg,argArray)
见 『Apply/Call调用模式』
Number
toFixed(fractionDigits)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-86464-3.html
所以受理费高
要是老萨还活着
这与买到有虫子的青菜一样