基础知识整理

执行上下文栈

可执行代码:

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

你可能感兴趣的:(基础知识整理)