基础知识整理

执行上下文栈

可执行代码:

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容