两个作用域
函数定义时确定
1.全局作用域
2.函数作用域
作用:隔离变量,不同作用域下同名变量不会有冲突
JS中没有块级作用域
两个上下文(或称为词法环境)
执行过程中产生
1.全局上下文:一个JS文件有且仅有一个
2.函数上下文:每调用一次产生一个上下文,调用完毕后销毁
作用:预编译过程中存储预处理数据
运行的两个步骤
1.预编译过程
预处理数据包括:
1.var对象:var a=10; —预处理—> var a=undefine
2.function : function fun(){} —预处理—> function fun=function(){}
(只有声明方式定义的函数有效,如上)
3.this
命名冲突时,function优先级最高
2.执行过程
命名冲突时,后面的覆盖前面的
预编译完成后:1.为所有变量赋值
2.忽略声明方式定义的函数声明方式定义的函数,只处理表达式方式定义的函数,eg:
(function fun(){})();//称为自执行函数或立即执行函数
备注:表达式方式定义的函数,即在函数前面加个基本运算符,eg:+ - * / ? () 等等