作用域 :代码的执行区域,代码的运行环境
预编译 :全局中、函数中找出执行环境的对象
作用域链
执行期上下文:当函数运行时,会创建一个称为执行期上下文的对象。一个执行期上下文定义了一个函数运行时的环境,函数每次执行时对应的执行期上下文是独一无二的,所以多次调用一个函数会创建多个执行期上下文,当函数执行完毕时,它所产生的的执行期上下文会被销毁。
函数是一个对象
function demo(){}
demo.name -> 'demo'
隐式属性 系统属性 [[Scopes]] 作用域链
[[Scopes]]:系统属性, 里面存储的是执行期上下文的集合,我们把这个集合叫做作用域链
闭包
是一种现象
当内部函数被保存到外部时,将会生成闭包。导致原有的作用域链不被释放,造成内存泄漏。
作用:
函数累加器
this关键字
全局作用域,this固定执行window
函数作用域, 取决于函数是如何被调用的
1. 函数直接调用,函数名() this->window
2. 函数被对象调用,对象.函数名
this-》对象
var myFunction = {
isprime:function(){
},
zero:function(){
},
getRandom:function(){
}
}
构造函数
构造函数就是一个普通的函数
new Object()
new Array()
new Date()
new RegExp()
new Function()
new Number()
new String()
new Boolean()
new Error()
用来创建对象 这个函数叫做构造函数
- 构造函数的函数名使用大驼峰命名法
new 关键字
- 在函数内部创建一个空对象
- 函数中this指向这个空对象
- 逐行执行函数中的代码
- 隐式返回这个对象
如果构造函数中出现了返回值,如果返回值为引用类型,则执行返回;如果返回值是基本数据类型,则直接忽略
new.target
该表达式在函数中使用,返回的当前的构造函数,如果这个函数不是通过new调用,则返回undefined