7

javaScript执行上下文

 3 years ago
source link: https://blog.csdn.net/weixin_50284675/article/details/115756937
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

javaScript执行上下文

original.png
董不懂代码 2021-04-16 13:32:01 290
文章标签: js

一、执行上下文是什么?

执行上下文用大白话来说也就是代码在被解析以前或者在执行时候所处的环境

二、执行上下文分类

执行上下文分为全局执行上下文,函数执行上下文, Eval(不常用,不做过多解释):
1.全局执行上下文:在执行全局代码前讲window确定为全局执行上下文
执行代码前主要进行了如下一系列操作
var定义的全局变量=>undefined 添加为window的属性
function定义的全局函数,添加为winow的方法
this指向window
然后开始执行全局代码
2.函数执行上下文:在调用函数,准备执行函数体之前,创建对应的函数执行上下文
首先要知道,每次调用函数都要创建函数执行上下文
调用函数前主要进行了如下一系列操作
形参变量->赋值->添加为函数的执行上下文属性
arguments->赋值(实参列表),添加为函数执行上下文的属性
var定义的局部变量->undefined,添加为函数执行上下文的属性
function声明的函数,添加为执行上下文的方法
this指向调用函数的对象
然后开始执行函数体代码
特别强调
全局执行上下文指的就是window对象
函数执行上下文指的也是一个对象(不要纠结这个对象是谁,只要知道是个对象来挂局部变量,局部方法,agruments就可以了)
案列
在前几天和同事交流这个技术点的时候,发现他理解的不太对,下面我用一个案列来演示
zhe'ge在这里插入图片描述
大家都习惯叫这个为变量提升,然而对变量提升理解有误,大家觉得var a;这行代码跑到了最上面,因此打印出来是undefined,变量提升其实也是执行上下文的一部分内容,正确理解应该是当访问a时候要去全局执行上下文(window)上看看有没有a这个属性。
我再用一个案列来展示函数执行上下文
在这里插入图片描述
类似全局执行上下文,错误的理解是变量提升到函数体内部第一行,正确的理解是在函数内部访问a时候要现在函数执行上下文这个对象上找有没有a属性,因为之前赋值是undefined,所以打印出来是undefined
总结
以上就是我对执行上下文的简单总结,没有讲的特别深,这个足够应对常见的面试题了,希望对各位同学有所帮助。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK