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

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

执行上下文概念以及理解

执行上下文是评估和执行JavaScript代码环境的抽象概念,但我们在JavaScript中所做的声明变量,声明函数,执行函数。他们都是在执行上下文中运行,也有了所谓的作用域。

执行上下文的类型

执行上下文分为三种类型,例如全局申明挂到window下的变量就是全局执行上下文; 函数被调用时创建的上下文的上下文类型为函数执行上下文,以及不常用的Eval也有属于自己的执行上下文

  1. 全局执行上下文 默认的上下文,其实就是全局对象window。任何不在函数内部的代码都在全局上下文中。
    会执行俩个事件:创建一个全局的window对象,设置this指向这个全局对象,一个程序中只有这一个全局执行上下文
// 这里声明的这个window下的变量上下文就是window
var windowVaribale 

// 挂在window下的函数,
function windowFunction (){
	console.log(this)
}
// 直接执行,执行上下文就是全局执行上下文
windowFunction() //这里的this 指向window

2.函数执行上下文 一个函数被调用时,都会创建一个新的上下文。每个被执行的函数都有自己的执行上下文,被调用时创建。谁调用this指向谁

  let functionIntegratio = {
            sayHello: function () {
                alert("hello")
            },
            yell: function () {
                alert("Hamburger")
                console.log(this)
            }
        }
        let consumer = {}
        consumer.yell = functionIntegratio.yell //这里yell 的执行上下文时consumer对象


        consumer.yell() // 这里的this 指向consumer --- 谁调用this指向谁

        let windowsFunction = functionIntegratio.yell
        windowsFunction()  // 这里this 是window

3.Eval 不讨论,因为不会,面试也不问

执行栈

所谓非计算机的人,like me . 难以理解害怕接触的痛
其实就是拥有LIFO(后进先出)数据结构的栈–last in first out (真他妈装呗),被用来存储代码创建的所有执行上下文
JavaScrpt引擎第一次遇到你的脚本时,会创建一个全局执行上下文并且压入当前执行栈。没当引擎遇到一个新的函数调用,就会给新的函数创建一个新的执行上下文,然后把新的上下文压进栈顶,again and again
Util some funciton is finished . then let it out , 然后控制流程达到打钱栈中的上一个上次问

鬼鬼 悟了!
所谓后进先出 , 先进先出不过是一种数据结构,而执行栈不过就是后进先出的数据结构,在这种数据结构下,才有了我们现在执行函数时候依次执行,有自己的作用域,this 指向

	function start () {
	console.log('Hello, mother funcker')
	(function functionInStart(){
		console.log("bla bla ")
	})()
 }
 // 这里首先创建start函数的执行上下文,就是先把start的指向上下文压(push)到栈顶 ,然后指向,执行到start函数里面的子函数时,创建了子函数的新的执行上下文,这个时候把子函数压到栈顶,先执行栈顶的函数,然后等子函数执行完,后入先出Last in first out,把子函数扔了,然后就是栈中应该执行的start函数,easy

晚上看到某个大哥给先进先出,后进先出俩种数据结构附的图,精彩,好理解。

俩种数据结构罢了,队列先进先出(FIFO)。执行栈后进先出(LIFO),测
JavaScript中的执行上下文和执行栈
JavaScript中的执行上下文和执行栈

词法作用域

JavaScript 采用的是词法作用域,函数的作用域在被定义的时候就决定了

var value = 1;

function foo() {
    console.log(value);
}

function bar() {
    var value = 2;
    foo();
}

bar();

// the result is 1 . cause the lexical scope is already confirm when the function is defined 


// so ... if we remove funciton foo to bar inside, the console result will be 2
var value = 1;

function bar() {
	function foo() {
	    console.log(value);
	}
    var value = 2;
    foo();
}

bar();

An example form 《JavaScript:The Definitive Guide》

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();

results all is ‘local scope’文章来源地址https://www.toymoban.com/news/detail-423817.html

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

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

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

相关文章

  • 执行上下文

    通过var定义(声明)的变量--在定义语句之前就可以访问到 值为undefined 通过function声明的函数--在之前就可以直接调用 值为函数定义(对象) 全局代码 函数(局部)代码 在执行全局代码前将window确定为全局执行上下文 对全局数据进行预处理 var定义的全局变量--undefined--添加

    2023年04月20日
    浏览(58)
  • 从零开始理解Linux中断架构(7)--- Linux执行上下文之中断上下文

            当前运行的loop是一条执行流,中断程序运行开启了另外一条执行流,从上一节得知这是三种跳转的第三类,这个是一个大跳转。对中断程序的基本要求就是 中断执行完毕后要恢复到原来执行的程序 ,除了时间流逝外,原来运行的程序应该毫无感知。        

    2024年02月11日
    浏览(67)
  • 从 ECMAScript 6 角度谈谈执行上下文

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

    2024年02月04日
    浏览(41)
  • JavaScript-----禁止鼠标选中文字和禁止鼠标右键上下文菜单

     selectstart   开始选中 还有一些别的方法,可以参考一下: 禁止鼠标右键 οncοntextmenu=\\\"return false\\\" 禁止选择 onselectstart=\\\"return false\\\" 禁止拖放 οndragstart=\\\"return false\\\" 禁止拷贝 οncοpy=document.selection.empty() 禁止复制 oncopy = \\\"return false\\\" 禁止粘贴 input type=text οnpaste=\\\"return false\\\" 禁止剪贴

    2024年02月10日
    浏览(54)
  • flask中的应用上下文

    flask中的应用上下文 Flask应用上下文主要包含两个对象: current_app 和 g 。这两个对象在处理请求期间都是全局可访问的,但在每个请求结束时都会被重置。 current_app :这是当前激活的Flask应用的实例。在大多数情况下,你可以将其视为应用的全局实例。然而,当你在处理多个

    2024年02月14日
    浏览(52)
  • JS引擎中的线程,事件循环,上下文

      线程 浏览器中有哪些进程呢? 1.浏览器进程:浏览器的主进程,负责浏览器的界面界面显示,与用户交互,网址栏输入、前进、后退,以及页面的创建和销毁。 2.渲染进程(浏览器内核):默认一个tab页面一个渲染进程,主要的作用为页面渲染,脚本执行,事件处理等。 3.

    2024年02月08日
    浏览(91)
  • CNN中的底层、高层特征、上下文信息、多尺度

    简短总结: 分类要求特征有较多的高级信息,回归(定位)要求特征包含更多的细节信息 1)图像的低层特征(对定位任务帮助大,我们可以想想比如轮廓信息都不准那怎么去良好定位): 图像底层特征指的是:轮廓、边缘、颜色、纹理、棱角和形状特征。 边缘和轮廓能反映

    2024年02月03日
    浏览(31)
  • Python教程(27)——如何使用Python中的上下文管理器

    当我们在编写代码时,经常会遇到需要管理资源的情况,比如打开和关闭文件,如果遇到了一些异常情况,我们需要关闭资源,不然会导致资源泄露,虽然我们可以通过手动的方式来关闭,但如果有多个异常情况需要考虑的话,万一不小心漏了一处,就芭比Q了。所以,如果有

    2024年02月19日
    浏览(55)
  • 【人工智能】LLM大模型中的词嵌入和上下文理解技术实例讲解,附具体的代码例子

    词嵌入(Word Embeddings)可以将高维的文本数据转换成低维的稠密向量表示,在进行自然语言处理任务时,这样的表示方式可以帮助算法理解词语之间的相似性以及上下文关系。以下是一个使用 TensorFlow 和 Keras 实现 Word2Vec 词嵌入模型的代码实例。 使用 TensorFlow 和 Keras 的 Word

    2024年02月07日
    浏览(80)
  • 超长上下文处理:基于Transformer上下文处理常见方法梳理

    原文链接:芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度,主要侧重于缓解注意力计算的二次复杂度。 例如,Transformer-XL通过缓存先前的上下文,并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力机制,使得token稀疏地关注远距离的token,从而

    2024年02月13日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包