javascript深入浅出 数组、函数和作用域
数组
概述:
有序的集合,拥有索引
js中的数组是弱类型,可含有不同类型元素
创建数组:
最大数数量 2^23-1
字面量
new Array()
增删改查:
增加
最后添加 arr.push(val)
最前添加 arr.unshift(val)
通过索引添加
删除
最后删除 arr.pop()
最前删除 arr.shift()
通过索引删除
删除后长度不变
修改
通过索引修改
查看
通过索引查看
遍历
for
按顺序,数字索引
for...in
不按顺序,可遍历原型链
函数
定义:
函数是一块代码,被定义一次,但可调用多次
不同创建方式:
函数声明
声明前置,前面代码可执行到
函数表达式
变量赋值
1 2 3 | var fun = function () { }; |
匿名函数立即执行
1 2 3 | ( function () { })(); |
返回函数
1 2 3 | return function () { }; |
命名函数表达式
1 2 3 | var fun = function foo() { }; |
函数构造器
new Function();
不同调用方式:
直接调用 foo();
对象方法 o.method();
构造器 new Foo();
call/apply/bind
this:
全局this
=window
一般函数的this
=window
严格模式为 undefined
对象方法的函数的this
谁调用this指向谁
原型链上的this
get/set方法与this
谁调用this指向谁
构造函数中的this
指向构造函数
call/apply方法与this
this指向从参数传入的对象
bind方法与this
把对象作为this传入
bing科里化
arguments:
foo.length 形参个数
arguments.length 实参个数
arguments.callee 函数名
作用域
闭包:
是什么
一个函数的引用,与一个引用环境绑定在一起
做什么
循环中的事件可用闭包
常用类库使用闭包封装
优劣
优点
灵活和方便
封装
劣势
性能消耗
内存泄露
作用域:
没有块级作用域
三种作用域
全局
函数
eval
作用域链
内层函数可范围所有外层函数局部变量