执行上下文栈
可执行代码:
1、全局代码
2、函数代码
3、eval代码
执行上下文栈:
ECStack = [ ];
当执行一个函数的时候,就会创建一个执行上下文,并且压入执行上下文栈,当函数执行完毕的时候,就会将函数的执行上下文从栈中弹出。
作用域
作用域是指程序源代码中定义变量的区域。
作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。
JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。
词法作用域:
函数的作用域在函数定义的时候就决定了
动态作用域:
函数的作用域在函数调用的时候才决定
静态作用域与动态作用域:
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
静态作用域输出值:1(静态作用域下,foo的作用域是全局的)
动态作用域输出值:2(动态作用域下,foo的作用域是bar函数)
变量提升
函数及变量的声明都将被提升到函数的最顶部。
JavaScript 初始化不会提升
var foo = function () {
console.log('foo1');
}
foo(); // foo1
var foo = function () {
console.log('foo2');
}
foo(); // foo2
function foo() {
console.log('foo1');
}
foo(); // foo2
function foo() {
console.log('foo2');
}
foo(); // foo2
网友评论