作用域
scope
每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。
[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。
作用域链
[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式连接,我们把这种链式连接叫做作用域链。
执行期上下文
当函数执行时,会创建一个成为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁。
查找变量
从作用域链的顶端依次向下查找。
闭包
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。
闭包的作用
1.实现公有变量
eg:函数累加器
2.可以做缓存(存储结构)
eg:eater
3.可以实现封装,属性私有化。
eg:Person();
4.模块化开发,防止污染全局变量
过多闭包会导致内存泄漏
立即执行函数
针对初始化功能的函数
(function(){
}())
执行完立即销毁
返回值使用
var num = (function(a, b, c){
var d = a + b + c * 2 - 2;
return d;
}(1, 2, 3));
只有表达式才能被执行符号执行
被执行符号执行的表达式的函数名称会省略
对象
属性的增,删,改,查
对象的创建方法:
字面量
构造函数
系统自带 new Object();Array();Number();Boolean();Date();
自定义
Object.create(原型)方法
对象的创建方法
- var obj = {} plainObject 对象字面量/对象直接量
2.构造函数- 系统自带的构造函数 new Object() Array() Number()
- 自定义
原型
定义
原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以集成该原型的属性和方法。圆形也是对象。
利用圆形特点和概念,可以提取共有属性。
对象如何查看原型 ——> 隐式属性_proto_
对象如何查看对象的构造函数 ——> constructor
a.sayName里面的this指向是,谁调用的这个方法,this就是指向谁。
原型链
绝大多数对象的最终都会继承自Object.prototype
Object.create(原型);
重写
Object.prototype.toString = function(){
}
Person.prototype.__proto__ = Object.prototype;
Object.prototype.toString = function(){
}
原型有这个方法的,又写了一个与原型方法同一个名字但不同功能的方法叫做重写
取整:
向上取整:Math.ceil
向下取整:Math.floor
产生零到一之间的随机数:Math.random
保留两位小数:toFixed
call/apply
作用,改变this指向
区别,后面传的参数形式不同
call 需要把实参按照形参的个数传进去
apply 需要传一个arguments
继承
function extend()
function inherit(target, origin)