我的网站

         
当前位置: 主页 > 我的网站4 >

如何理解JS执行上下文

时间:2024-01-15 20:44 来源:网络整理 转载:我的网站

主要从以下几个方面考虑:

执行上下文是在执行中确立,而不是声明,如函数分为全局、函数以及eval三种,那么对应了全局函数、eval环境上下文遵循栈的规则,先进后出虽无明确规定,但也遵循堆栈溢出,如:

function fn() { fn();}fn();// Uncaught RangeError: Maximum call stack size exceeded

function foo () { function bar () { return 'I am bar'; } return bar();}foo();

上述代码可以大致这么理解:

分为两个阶段:

5.1 准备阶段:

a. 函数上下文初始化形参并赋值

b. 初始化arguments并赋值

c. 变量声明(不赋值,见变量提升),字面量函数声明(不赋值)

d. this指向(由调用者确定)

e. 确定作用域

5.2 执行阶段:

a. 变量赋值

b. 字面量函数复制

c. 调用函数

d. 顺序执行代码

面试题:

(function (name) { console.log(a); // function console.log(b); // undefined var a = "111"; var b = function () { return "222"; } function a() { return "333"; } console.log(a); // 111})('Jerry')

代码执行阶段分析如下:

executionContext = { vo : { arguments : {0 : "Jerry",length : 1}, name : "Jerry", b : undefined, a : function, }, scope : {}, this : {}}

关注微信公众号,解锁更多技术文章