作用域
function fun(){
var a =0;
alert(a);
}
fun();
alert(a);
作用域:变量的作用范围
全局变量
作用范围为整个程序的执行范围
在函数体外部定义的变量就是全局变量
在函数体内部不使用var定义的也是全局变量
局部变量
作用范围是某个函数体内部
在函数体内部通过var关键字定义的变量或者形参,都是局部变量
当局部变量与全局变量重名时,在函数体内部局部变量优先于全局变量
return关键字
1.结束函数的执行
2.交回函数执行权
3.返回一个结果函数调用位置
堆栈
是一种数据结构,指的是数据存取的方式,当定义一个变量时,内存会开辟一段空间
栈( Stack):先进后出(FILO),在栈顶做插入(压栈)和删除操作(出栈)。
队列:先进先出(FIFO),在队头做删除操作,在队尾做插入操作。
堆和它们不同,代码执行时系统动态分配,不存在是先进后出还是先进先出。
执行环境执行栈(也称执行上下文–execution context)
当JavaScript解释器初始化执行代码时,它首先默认进入全局执行环境,从此刻开始,函数的每次调用都会创建一个新的执行环境,每一个执行环境都会创建一个新的环境对象压入栈中。
当执行流进入一个函数时,函数的环境对象就会被压入一个环境栈中(execution stack)。在函数执行完后,栈将其环境弹出,把控制权返回给之前的执行环境。