首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript之JS执行环境和作用域

执行环境定义了变量或函数有权访问其他数据,决定了他们各自行为,每个执行环境都有一个与之关联变量对象(variable object),环境中定义所有变量和数据都保存在这个对象中,我们无法访问这个变量对象...1、全局执行环境:全局执行环境是最外围一个执行环境。在Web浏览器中全局执行环境被公认为是window对象,因为所有的全局变量和函数都是作为windows对象属性和方法创建。...当某个执行环境所有代码执行完毕后,该环境被销毁,保存在其中所有变量和函数定义也随之销毁。(全局执行环境则到浏览器被关闭时才会被销毁); 2、函数执行机制:每个函数都有自己执行环境。...当执行流进入一个函数时,函数换进就会被推入一个环境栈中,当函数执行完之后,栈将其环境弹出,把控制权返回给之前执行环境(假设当前执行函数没有内嵌函数,且他有父函数包围)。...ECMAScript程序中执行流正是由这个方便机制控制着。 3、作用域链:每一个执行环境对应一个作用域链,这是当代码在一个环境执行时,自己创建

67850

JS词法环境执行上下文

前言JavaScript是一门解释性动态语言,但同时它也是一门充满神秘感语言。如果要成为一名优秀JS开发者,那么对JavaScript程序内部执行原理要有所了解。...代码都是在执行上下文中运行。你可以将代码运行与执行上下文关系类比为进程与内存关系,在代码运行过程中变量环境信息都放在执行上下文中,当代码运行结束,执行上下文也会销毁。...而执行栈(Execution Context Stack)是用来管理执行期间创建所有执行上下文数据结构,它是一个LIFO(后进先出)栈,它也是我们熟知JS程序运行过程中调用栈。...将全局执行上下文压入执行栈,通常JS引擎都有一个指针running指向栈顶元素:图片JS引擎会将全局范围内声明函数(foo)初始化在全局上下文中,之后开始一行行执行代码,运行到console就在running...总结本文关于执行上下文理论知识比较多,不容易马上吸收理解,建议你逐渐消化、反复阅读理解。当你熟悉了执行上下文和词法环境,相信去理解认识更多JS特性和概念时,会更加轻松容易。

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【译】JS执行上下文和环境栈是什么?

    这篇文章中,我将深入探讨JavaScript中一个最基本部分,即执行上下文(或称环境)。...在运行JavaScript代码时,执行环境非常重要,并可以认为是以下其中之一: 全局代码 - 默认环境,你代码第一时间在这里执行。 函数代码 - 当执行流进入函数体时候。...我们把术语执行上下文视为当前代码评估环境/范围。现在,条件充足,我们看个包含全局和函数/本地上下文评估代码示例。...环境栈 浏览器中JavaScript解释器是单线程实现。这意味着在浏览器中一次只能发生一件事情,其它动作或事件在所谓执行栈中排队。...理解执行上下文和环境栈可以让你了解代码评估和你预期不同值原因。 你是认为了解解释器内部工作原理是多余还是必要JavaScript知识点呢?

    77320

    js --- 执行机制

    JS为什么是单线程?  JS最初被设计用在浏览器中,那么想象一下,如果浏览器中JS是多线程。...process1 删除了该dom,而process2 编辑了该dom,同时下达2个矛盾命令,浏览器究竟该如何执行呢? 2 JS为什么需要异步?...如果JS中不存在异步,只能自上而下执行,如果上一行解析时间很长,那么下面的代码就会被阻塞。 对于用户而言,阻塞就意味着"卡死",这样就导致了很差用户体验 3 JS单线程又是如何实现异步呢?   ...是通过事件循环(event loop),理解了event loop机制,就理解了JS执行机制。...,而是延迟了一段时间,满足一定条件后才去执行,这类代码,我们叫异步代码。

    6.3K20

    JS执行机制

    JS执行机制 以下代码执行结果是什么?...单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致问题是: 如果 JS 执行时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞感觉。...于是,JS 中出现了同步任务和异步任务。 同步 ​   前一个任务结束后再执行后一个任务,程序执行顺序与任务排列顺序是一致、同步。...比如做饭异步做法,我们在烧水同时,利用这10分钟,去切菜,炒菜。 他们本质区别: 这条流水线上各个流程执行顺序不同。 1.3 JS执行机制(事件循环) 1. 先执行执行栈中同步任务。...一旦执行栈中所有同步任务执行完毕,系统就会按次序读取任务队列中异步任务,于是被读取异步任 务结束等待状态,进入执行栈,开始执行

    7.4K20

    JS执行顺序

    javascript给人直观感受是,从上往下执行,但实际上却不是这样,先看个例子 1. console.log(test); 2. var test = "你好"; 3. console.log(...因为javascript执行时,在同一个作用域内是先编译再执行 编译时候会编译 function 和 var 这两个关键词定义变量,编译完成后从上往下执行并向变量赋值 所以执行第1行时, var test...已经执行过了,所以test不会报错,而test2就会报错 需要注意是,对 var test 执行编译时,只是先定义了 test 这个变量,并不会把 "你好" 这个值赋给test,而是到第2行时才给test...赋值,这就是为什么第1行执行结果是 undefined 对于上面的例子,可以这样理解 //先编译 var 定义变量 1. var test; //编译完成后,从上到下执行代码 2. console.log...//执行结果是"你好" function test() { console.log("你好"); } 模拟编译执行过程 //找到 function 定义部分进行编译 //以函数名作为变量名,同时用函数赋值

    9.2K60

    JS执行机制

    JS 是单线程 JavaScript语言一大特点就是单线程,也就是说,同-个时间只能做一件事。...这样所导致问题是: 如果 JS 执行时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞感觉。 2....于是,JS 中出现了同步任务和异步任务。 同步 前一个任务结束后再执行后一个任务,程序执行顺序与任务排列顺序是一致、同步。...同步任务指的是: 在主线程上排队执行任务,只有前一个任务执行完毕,才能执行后一个任务; 异步任务指的是: 不进入主线程、而进入”任务队列”任务,当主线程中任务运行完了,才会从”任务队列...JS执行机制(事件循环) ? ? 由于主线程不断重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop) .

    7.5K31

    JS词法环境执行上下文_2023-02-24

    前言 JavaScript是一门解释性动态语言,但同时它也是一门充满神秘感语言。如果要成为一名优秀JS开发者,那么对JavaScript程序内部执行原理要有所了解。...代码都是在执行上下文中运行。 你可以将代码运行与执行上下文关系类比为进程与内存关系,在代码运行过程中变量环境信息都放在执行上下文中,当代码运行结束,执行上下文也会销毁。...而执行栈(Execution Context Stack)是用来管理执行期间创建所有执行上下文数据结构,它是一个LIFO(后进先出)栈,它也是我们熟知JS程序运行过程中调用栈。...将全局执行上下文压入执行栈,通常JS引擎都有一个指针running指向栈顶元素: 图片 JS引擎会将全局范围内声明函数(foo)初始化在全局上下文中,之后开始一行行执行代码,运行到console就在...总结 本文关于执行上下文理论知识比较多,不容易马上吸收理解,建议你逐渐消化、反复阅读理解。当你熟悉了执行上下文和词法环境,相信去理解认识更多JS特性和概念时,会更加轻松容易。

    44330

    【C语言】程序翻译环境执行环境

    _CSDN博客  欢迎各位→点赞 + 收藏⭐️ + 留言​ 系列专栏-【C】系列_謓泽博客-CSDN博客 ✉️我们并非登上我们所选择舞台,演出并非我们所选剧本 程序翻译环境执行环境...那么在上面说ANSIC任何一种实现上都存在这两种不同环境有⇣ 翻译环境→在这个环境源代码被转换为可执行机器指令。  在我们所使用编译器像Vs所扮演就是这个翻译环境。 ...执行环境→用于实际执行代码当中。  这里运行环境实际上就是执行环境。...具有部分链接文件是可能,如库程序,在目标文件中仍含有未解决地址。 运行环境 程序执行过程如下⇣ ①程序是必须载入内存当中,在操作系统环境环境中:一般都是由这个操作系统完成。...在独立环境中,程序载入都必须是手工进行安排,也可以是通过可执行代码置入只读内存当中完成。 计算机当中所有的数据都是必须要放在内存当中,不同类型数据占用字节数不一样。

    99420

    关于js暂停执行方法

    JavaScript是一门单线程但是可处理异步任务脚本语言,是没有提供sleep等类似的方法,当有需求需要暂停js脚本时,可以使用以下方法  单线程分析:http://blog.csdn.net/...talking12391239/article/details/21168489 一:alert,comfirm弹窗暂停 jsalert,confirm弹窗类方法,是可以暂停js脚本执行 例如: <...这样弹窗,是需要点击确认才会执行下面的语句 就算是定时器也一样暂停 var i=0; setInterval(function(){ console.log(i); i++;...服务器接收之后,sleep(time),到时间再输出,回到ajax回调函数,在这个时间 内,ajax是停止状态 最后再补充几句,其实js是不能暂停脚本,上面的方法,只是抢占当前浏览器线程,相当于该线程某个语句一直还停留在当前浏览器线程..., 如:while,当前还未执行完while循环该方法,所以不能退出该线程 不让切换执行,所以实现了暂停 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn 上一篇

    7.1K00

    js引擎执行机制详解

    本文主要和大家分享js引擎执行机制详解,希望能帮助到大家。 首先,请牢记 2 点: js 是单线程语言 js event loop 是 js 执行机制。...深入了解 js 执行,就等于深入了解 js event loop js 为什么是单线程js 最初被设计用在浏览器中,那么想象一下,如果浏览器中 js 是多线程。...对于用户而言,阻塞就意味着‘卡死’,这样就导致了很差用户体验。 所以,js 中存在异步执行。 单线程又是如何实现异步呢? 既然 JS 是单线程,只能在一条线程上执行,又是如何实现异步呢?...引擎执行机制 首先,请牢记 2 点: js 是单线程语言 js event loop 是 js 执行机制。...深入了解 js 执行,就等于深入了解 js event loop js 为什么是单线程js 最初被设计用在浏览器中,那么想象一下,如果浏览器中 js 是多线程

    1.3K40

    JS立即执行函数学习

    格式: 格式一:(function(){})() 格式二:(funtion(){}()) 理解:   立即执行函数会将声明函数表达式执行。...并且在多人开发项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名变量给覆盖掉。由于javascipt自由性。...没有私有域概念,这样写可以模仿一个私有作用于,用匿名函数作为一个容器,容器内部可以访问外部变量,而外部变量不能访问内部变量。俗称”匿名包裹器“或者“命名空间”。   ...并且在匿名函数容器中写函数然后通过赋值方法,可以变向到达java类效果。将方法存进变量里,全局调用。...var rxr=r.control={}; var ff=22; rxr.ss=11; rxr.aa=function(){ console.log('执行

    2.1K20

    mongodb执行js脚本(一)---shell执行

    mongodb执行js脚本(一)---shell执行 2015年06月09日 10:58:36 张小凡vip 阅读数 21310更多 所属专栏: mongodb基础与运用 版权声明:本文为博主原创文章...js脚本进行复杂管理 mongodb shell是javascript实现,如果直接使用js实现相应功能则显得很直观和简便。...比如我们对一些数据进行 统计计算,除了使用mapreduce之外,直接使用js也是很好选择。...还有一些批处理,数据同步都可以使用js 使用js脚本进行交互优点与缺点 (1)无需任何驱动或语言支持; (2)方便cron或管理员定时任务; (3)注意点:任然是数据格式问题;...js脚本一般会用来执行以下任务 (1)备份; (2)调度map-reduce命令; (3)离线报告,离线任务; (4)管理员定时任务; 如何运行一个js脚本 .

    9.4K30

    关于JS执行顺序

    背景 众所周知,JS是单线程语言,但它支持异步操作,其核心机制就是JS引擎事件循环。...原理 总的来说,流程图如下: Promise中代码块是立即执行。...{ console.log(3) }) console.log(4) // 4 2 3 1 我们把setTimeout放在最开始,而且不管设置了几次nextTick,setTimeout里函数体总是最后执行...更复杂一点 不管我Promise怎么组合,怎么套,由于setTimeout设置是宏任务,所以它始终在这些微任务都执行完成之后才会运行: setTimeout(() => { console.log...通过这样事件循环,使得单线程JS也可以拥有异步能力,使得如AJAX请求这样费时间操作可以被安排到后面来执行,不影响页面的加载和渲染。

    5.6K30
    领券