链式作用域
父对象的所有变量,对子对象都是可见的,
但子对象的所有变量,对父对象都是不可见的
闭包
定义在一个函数内部的函数,方便读取其他函数内部变量,且这些变量的值始终保持在内存中
优点:灵活方便,封装
缺点:内存消耗很大,IE中可能导致内存泄露
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
执行上下文就是在执行代码之前,把将要用到的所有的变量都事先拿出来,有的直接赋值了,有的先用undefined占个空
全局作用域的上下文环境数据内容为:
局部作用域的上下文环境数据内容为:
eval()
执行上下文栈
全局上下文环境 → 调用函数,产生函数上下文环境 → 函数调用完成,函数上下文环境消除 → 全局上下文环境
处于活动状态的执行上下文环境只有一个
一切(引用类型)都是对象,对象是属性的集合
console.log(typeof $); // function console.log($.trim(" ABC ")); // function
对象都是通过函数创建的
var obj = { a: 10, b: 20 };
var obj = new Object();
obj.a = 10;
obj.b = 20;
function Fn() {}
var fn1 = new Fn();
var arr = [5, 'x', true];
var arr = new Array();
arr[0] = 5;
arr[1] = 'x';
arr[2] = true;
语法糖意指那些没有给计算机语言添加新功能,而只是提供更实用的编码方式,有益于更好的编码风格,更易读的语法
作用域包括全局作用域和局部作用域,没有块级作用域
作用域链在当前作用域查找自由变量查找无果,继续逐层查找各作用域,直至全局作用域的路径
自由变量在某作用域中使用,却没有在该作用域中声明的变量
面向对象编程(OOP)
Prototype模式(用于构造函数)
function Animal(){
this.species = "动物";
}
function Cat(name,color){
this.name = name;
this.color = color;
}
Cat.prototype.type = '猫科动物';
Cat.prototype.eat = function(){alert('吃鱼');}
var cat1 = new Cat('大黄','yellow');
var cat2 = new Cat('大毛','brown');
alert(cat1.type);
cat2.eat();
Cat.prototype = new Animal();
Cat.prototype.construtor = Cat;
alert(cat1.species);