执行上下文

这篇具有很好参考价值的文章主要介绍了执行上下文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

变量提升与函数提升

变量声明提升

  • 通过var定义(声明)的变量--在定义语句之前就可以访问到
  • 值为undefined
console.log(a);	//undefined
var a = 1;
//执行顺序
var a;
console.log(a);
a = 1;

函数声明提升

  • 通过function声明的函数--在之前就可以直接调用
  • 值为函数定义(对象)
fn();//可调用
function fn(){
    conse.log('哈哈');
}

执行上下文

代码分类--位置

全局代码

函数(局部)代码

全局执行上下文

  • 在执行全局代码前将window确定为全局执行上下文

    • 对全局数据进行预处理
    • var定义的全局变量-->undefined--添加为window的属性
    • function声明的全局函数-->赋值--添加为window的方法
    • this-->赋值window
    • 开始执行全局代码
    //全局执行上下文
    console.log(a1, window.a1);  //undefined undefined
    a2();   //a2();
    console.log(this);  //window
    var a1 = 3;
    function a2() {
        console.log('a2()');
    }
    console.log(a1);
    

函数执行上下文

  • 在调用函数--准备执行函数体之前--创建对应的函数执行上下文对象--虚拟的,存在于栈中

    • 对局部数据进行预处理
    • 形参变量-->赋值(实参)--添加为执行上下文的属性
    • arguments-->赋值(实参列表)--添加为执行上下文的属性
    • var定义的局部变量-->underfined--添加为执行上下文的属性
    • this-->赋值(调用函数的对象)
    • 开始执行函数体代码
    //函数执行上下文
    function fn(a1) {
        console.log(a1);    //2
        console.log(a2);    //undefined
        a3();   //a3
        console.log(this);  //window
        console.log(arguments); //2,3
        var a2 = 4;
        function a3() {
            console.log('a3');
        }
    }
    fn(2, 3);
    

执行上下文栈

  • 在全局代码执行前--JS引擎会创建一个栈来存储管理所有的执行上下文对象
  • 在全局执行上下文(window)确定后--将其添加到栈中(压栈)
  • 在函数执行上下文创建后--将其添加到栈中(压栈)
  • 在当前函数执行完后--将栈顶的对象移除(出栈)
  • 当所有代码执行完成后--栈中只剩下window
<script>
    //执行全局上下文
	var a = 10;
	var bar = function (x) {
   		var b = 5;
    	foo(x + b); //进入foo执行上下文
	}
	var foo = function (y) {
    	var c = 5;
    	console.log(a + c + y);
	}
	bar(10);    //进入bar函数执行上下文
</script>

执行上下文

面试题

console.log('gb:' + i);
var i = 1;
foo(1);
function foo(i) {
    if (i == 4) {
        return;
    };
    console.log('fb:' + i);
    foo(i + 1);
    console.log('fe:' + i);
}
console.log('ge:' + i);

执行上下文文章来源地址https://www.toymoban.com/news/detail-419556.html

function a(){};
var a;
console.log(a); //f a(){}--变量先被提升--函数覆盖变量后提升
if(!(b in window)){
    var b = 1;
}
console.log(b); //undefined--变量先被提升为全局变量
var c = 1;
function c(c){
    var c = 3;
}
c(2);   //报错--变量先被提升--函数后被提升--变量最后被赋值--因此不是函数,不能被调用

到了这里,关于执行上下文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript中的执行上下文和执行栈

    执行上下文是评估和执行JavaScript代码环境的抽象概念,但我们在JavaScript中所做的声明变量,声明函数,执行函数。他们都是在执行上下文中运行,也有了所谓的作用域。 执行上下文分为三种类型,例如全局申明挂到window下的变量就是全局执行上下文; 函数被调用时创建的上

    2023年04月24日
    浏览(39)
  • 从 ECMAScript 6 角度谈谈执行上下文

    大家好,我是归思君 起因是最近了解JS执行上下文的时候,发现很多书籍和资料,包括《JavaScript高级程序设计》、《JavaScript权威指南》和网上的一些博客专栏,都是从 ES3 角度来谈执行上下文,用ES6规范解读的比较少,所以想从ES6的角度看一下执行上下文。 下面我尝试用E

    2024年02月04日
    浏览(40)
  • 【转】JavaScript 执行上下文——JS 的幕后工作原理

    转自译文: JavaScript 执行上下文——JS 的幕后工作原理 。 译文中图片不显示,要结合原文看,看着不方便。整理了一份含图片的。所以有了此篇的转载,以方便阅读。 以下是正文: 原文:JavaScript Execution Context – How JS Works Behind The Scenes,作者:Victor Ikechukwu 所有JavaScript代码

    2024年01月20日
    浏览(43)
  • Python函数-上下文管理器

    上下文管理协议(Context Management Protocol):包含方法 enter () 和 exit (),支持该协议的对象要实现这两个方法。 上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__() 和 exit () 方法。 上下文管理器定义执行 with 语句时要建立的运行时上下文,负

    2024年02月12日
    浏览(51)
  • 深入理解JavaScript堆栈、事件循环、执行上下文和作用域以及闭包

    在JavaScript中,内存堆是内存分配的地方,调用栈是代码执行的地方。 原始类型的保存方式:在变量中保存的是值本身,所以原始类型也被称之为值类型。 对象类型的保存方式:在变量中保存的是对象的“引用”,所以对象类型也被称之为引用类型。 调用栈理解非常简单,当

    2024年02月03日
    浏览(52)
  • Linux_进程的优先级&&环境变量&&上下文切换&&优先级队列

    什么是优先级? 指定一个进程获取某种资源的先后顺序 本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源(CPU)是有限的 操作系统关于调度和优先级的原则:分时操作系统,基本的公平,如果进程因为长时间不被调整,就造成了饥饿问题 Linux的优先级特

    2024年04月09日
    浏览(57)
  • linux通过grep根据关键字查找日志文件上下文

    grep -C 10 keyword catalina.out 显示file文件中匹配keyword字串那行以及上下10行 grep -B 10 keyword catalina.out 显示keyword及前10行 grep -A 10 keyword catalina.out 显示keyword及后10行 grep -C 10 keyword catalina.out aaa.txt grep -o keyword catalina.out | wc -l grep -c keyword catalina.out grep -V

    2024年02月16日
    浏览(57)
  • 学习笔记整理-面向对象-02-认识函数的上下文

    什么是上下文 函数的上下文 函数中可以使用 this ,它表示 函数的上下文 。 与中文中\\\"这\\\"类似,函数中的this具体指代什么 必须通过调用函数时的\\\"前言后语\\\"来判断 函数中的this 函数的上下文由调用方式决定 同一个函数,用不同的形式调用它,则函数的上下文不同 情形

    2024年02月13日
    浏览(37)
  • 【论文阅读】WATSON:通过聚合上下文语义从审计日志中抽象出行为(NDSS-2021)

    Zeng J, Chua Z L, Chen Y, et al. WATSON: Abstracting Behaviors from Audit Logs via Aggregation of Contextual Semantics[C]//NDSS. 2021. TC_e3 trace、攻击调查、TransE、 以信息流为边界提取子图,为子图提取行为表示,进一步聚类,分析师只需分析一个簇的代表事件 1. 摘要引言 WATSON,一种通过推断和汇总审计

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包