js中不是所有花括号(if,while等)都能创建作用域,只有函数语句中的花括号才能创建
内存作用域和对象
| 1 | var makeArray = function() { | 
闭包。比如functionA存在functionB中,functionA持有functionB的变量x。在functionB执行完成后返回functionA,functionA仍然可以调用x进行执行。
| 1 | var sagas = []; | 
this关键字
1) this所绑定的对象1
2
3
4
5
6
7var obj = {
    fn: function(a,b) {
        log(this);
    }
};
//var ob2 = {method:obj.fn}
obj.fn(3,4); //this->obj(this绑定obj对象。但如果没有点符号,将绑定成全局变量)
2) this在大部分重要的用法中都以参数的形式出现
3) this绑定window对象 
| 1 | var fn = function(x,y) { | 
4) 想要this指向你想绑定的对象。需要使用.符号或使用内置的.call方法。以及new。
原型链(prototype)
| 1 | var gold = {a:1}; | 
对象修饰模式
经常用于向某个已拥有了某些功能的对象添加功能
| 1 | var carlike = function(obj, loc) { | 
函数类
| 1 | var Car = function(loc) { | 
函数共享模式改造,减少每次move函数的创建1
2
3
4
5
6
7
8
9var Car = function(loc) {
    var obj = {loc: loc};
    obj.move = move;
    return obj;
}
var move = function() {
        this.loc++;   
};
如果方法较多,可以
| 1 | var Car = function(loc) { | 
原型类
| 1 | var Car = function(loc) { | 
构造函数原型
| 1 | var Car = function(loc) { | 
伪类模式
| 1 | var Car = function(loc) { | 
超类和子类
| 1 | var Car = function(loc) { | 
伪类子类
Object.create在创建复制对象时,没有创建constructor。
| 1 | var Car = function(loc) { | 
