浏览器工作原理学习(九)

news/2024/7/3 2:58:06

作用域链

  1. 什么是作用域链?
  • 每个执行上下文的变量环境中,都包含了一个外部引用,用来指向外部的执行上下文,我们把外部引用称为outer。
  • JS引在执行全局上下文中查找,这个查找的链条就是被称为作用域链。
  1. 什么是词法作用域?
  • 词法作用域是指作用域是由代码中函数声明的位置来决定的,所以词法作用域是静态的作用域,通过它就能够预测代码在执行过程中如何查找标识符。
  • 词法作用域是代码编译阶段就决定好的,和函数怎么调用没关系。
  • 块级作用域中变量查找:块级作用域内词法环境——>块级作用域变量环境——>全局执行上下文中的词法环境——>全局执行上下文中的变量环境。

闭包(使用不正确会造成内存泄漏)

  • 根据词法作用域规则,内部函数总是可以访问他们的外部函数中的变量。当通过调用一个外部函数返回一个内部函数后,即该外部函数执行结束后,内部函数引用外部函数的变量依旧存在内存中,我们把这些变量的集合称为闭包。
  • 闭包的使用:当前函数的执行上下文——>外部函数闭包——>全局执行上下文的顺序来查找变量。
  • 闭包造成内存泄漏:如果引用闭包的函数是一个全局变量,那么闭包会一直存在知道页面关闭,如果这个闭包以后不在使用,就会造成内存泄漏。
  • 引用闭包的函数是哥局部变量:等函数销毁后,下次JS引擎执行垃圾回收时,判断闭包这块内容不在使用,那么JS引擎的垃圾回收器就会回收这块内存。
  • 闭包的正确使用:如果该闭包会一直使用,那么它可以作为全局变量而存在;但如果使用频率不高,而且占用内存又比较大,那就进来让它成为一个局部变量。
  • 小结:JS的作用域链是由词法作用域决定的,而词法作用域是由代码结构来确定的。

http://www.niftyadmin.cn/n/2608629.html

相关文章

网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘

网站的建站技术近几年得到迅速的发展,网页的布局与特效动画技术层出不穷,网站建设已经从简单的技术支持时代衍变到现在的视觉美化时代。但如何使设计的网页高人一筹,达到让人过目不忘的境界,如何追求以最简单的特效让网页“亮”起…

浏览器工作原理学习(十)

this 在对象内部的方法中使用对象内部的属性是一个非常普遍的需求。但JS的作用域机制并不支持这一点,为此,JS高出了this机制。this 和作用域链是2套不同的系统。 什么是this? this是和执行上下文绑定的, 每个执行上下文中都有一…

linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

rcp rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输。要使用rcp,需要具备以下条件&#x…

浏览器工作原理学习(十一)

语言类型 在使用前需要确认其变量数据类型的称为静态语言©,运行过程中需要检查数据类型的语言称为动态语言(js)。在赋值时,语言回进程隐式类型转换,这类语言被称为弱类型语言,不支持隐式类型转换额语言称为强类型语言。 JS数…

【跃迁之路】【423天】刻意练习系列182—SQL(2018.04.04)

(跃迁之路)专栏 叨叨两句 技术的精进不能只是简单的刷题,而应该是不断的“刻意”练习该系列改版后正式纳入【跃迁之路】专栏,持续更新刻意练习——MySQL 2018.04.02 题目描述 DROP TABLE IF EXISTS test1;CREATE TABLE test1 (id int(11) NOT NULL AUTO_…

浏览器工作原理学习(十二)

编译器和解释器 按语言的执行流程,可以把语言划分为编译型语言和解释型语言。编译型语言:在程序执行前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次运行程序时,都可以…

离线计算成本节省的神兵利器

摘要: 对于创业成长型的企业来说,离线计算已经必不可少了,通过离线计算我们可以生成复杂的业务报表,通过离线计算我们也能精确的算出用户画像。离线计算已经当今的企业中成为了不可或缺的存在。那么使用弹性计算能够对离线计算领域…

浏览器工作原理学习(十三)

消息队列和事件循环系统 消息队列 消息队列是一种数据结构,可以存放要执行的任务。它符合队列先进先出的特点。IO线程中的产生的新任务会添加进消息队列尾部。渲染主线程会循环地从消息队列头部中读取任务,执行任务。由于多个线程操作同一个消息队列&am…