前端小知识点(4):JS 运行机制和存储

目录

被忽视的内存管理

JS工作原理

JS代码如何运行

JavaScript内存的生命周期

栈内存、堆内存

代码案例

运行结果


  • 被忽视的内存管理

JavaScript不像C、C++等语言——程序员必须通过调用内存管理接口,比如 malloc()和free(),自己手动分配和释放内存。

JS引擎会“自动”管理内存。也就是说,JS在创建变量(对象,字符串等)时分配内存,并且在执行完毕,将不再使用的变量的内存空间释放。这种自动化的管理方式,使得JS入门简单、开发快,但同时也让很多人忽视了对JS内存的管理与优化。

  • JS工作原理

每个浏览器都有自己的引擎,如谷歌有 V8。

不管怎样,HTML,CSS,JS都是在浏览器中渲染执行的,确切的说是浏览器内核做的事情,渲染引擎和JavaScript执行引擎。

  • JS代码如何运行

几乎所有JavaScript开发人员都在使用的API(例如“ setTimeout”)。但是,引擎不提供这些API。

我们拥有由浏览器提供的称为Web API的东西,例如DOM,AJAX,setTimeout等。

然后,我们有了非常流行的事件循环和回调队列。

  • JavaScript内存的生命周期

内存分配:分配你所需要的暂时使用内存大小,当申明变量、函数、对象的时候,系统会自动为他们分配内存。

内存使用:即读写内存,在每次创建字变量、函数、对象的时候,程序会分配新内存来存储实体。

内存回收:对于不需要使用的内存将其释放。

  • 栈内存、堆内存

栈内存:

1、基本类型

2、按值访问

3、存储的值大小固定

4、系统会自动分配内存空间

5、空间小,运行效率高

6、先进后出

堆内存:

1、引用类型

2、按照引用访问

3、存储大小不固定

4、内存分配:由代码进行分配

5、空间大,运行效率较低

6、无序存储(根据引用直接获取)

代码案例

var num = 10; //内存分配console.log(  num  );  //内存使用num = null;  //内存回收(释放)var timer = setTimeout(function(){console.log(11111)})var a = 10;
var b = '你好';
var c = true;
var d = undefined;
var e = null;var f = [1,2,3];
var g = {a:1}console.log(a);

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux ps aux查看进程

一、ps 命令 ps 是Process Status的缩写,用于查看进程状态,ps 可以显示linux系统的所有进程信息。 用法: ps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。 ps c 列出程序时,显示每个程序…

2010数据库SQL Server 盘点

让我们一起来盘点一下2010数据库SQL Server 发布了那些给力的新品。 1. 微软发布SQL Server 2008 R2 微软公司于2010年4月21日宣布推出Microsoft SQL Server 2008 R2。SQL Server 2008 R2已经可以看作是本年度的一次重量级发布。微软公司努力将SQL Server打造为一个信息平台&am…

linux下有四个作业优先级,第一次作业:对Linux系统分析

一.操作系统的组成1.无进程的内核在一些操作系统当中操作系统的内核在所有的进程之外执行。也就是说操作系统有自己的内存区域和系统栈,当进程发生 中断,陷阱或系统调用时,此进程的上下文环境被保存在系统栈中,控制权转移给内…

前端小知识点(6):听了好多闭包,这次可能最懂

目录 一、作用域和作用域链 二、闭包 三、无意间共享环境[可以通过闭包解决] 代码一 结果一 代码二 结果二 代码三 结果三 一、作用域和作用域链 当函数声明的时候,函数会通过内部属性[scope]来记录创建范围 二、闭包 什么是闭包:闭包是一个函数加…

Linux的Qt编译出现:-1: error: cannot find -lGL问题的解决方法

Qt是支持跨平台的C图形用户界面应用程序开发框架,在一个平台上开发好应用程序可以在多个平台方便移植。 在将windows平台上开发的Qt界面程序移植到Linux Ubuntu系统中,在构建项目时出现以下编译问题: error: cannot find -lGL。 即&#xf…

git rebase原理(转)

git rebase 不会取回代码 要用git fetch先取回, git rebase 是合并代码。 (1)首先用git fetch返回服务器上的代码 (2)首先用git rebase origin/master 合并 (3)如果发生冲突了会提示&#xff0c…

前端小知识点(7):正则前瞻

目录 一、js中的正则表达式,只有前瞻没有后顾 正向前瞻:(?) 》匹配符合的 代码1 结果1 代码2 结果2 一、js中的正则表达式,只有前瞻没有后顾 正向前瞻:(?) 》匹配符合的 负向前瞻:(?!) 》匹配不…

c语言编译生成cpp,C语言的编译过程

编译: 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。流程:C源…

设置启用树莓派的HDMI显示

树莓派所有的启动初始化都是在config.txt中完成的,因此,若插入HDMI树莓派没有显示桌面,则是没有配置HDMI。 首先在找到config.txt,两种方法: 第一种方法,将SD卡取出,用读卡器在windows上找到&…

前端小知识点(8):作者为什么设计原型

目录 一、从古代说起 二、Brendan Eich的选择 三、new运算符的缺点 四、prototype属性的引入 五、总结 六代码部分 一、从古代说起 要理解Javascript的设计思想,必须从它的诞生说起。 1994年,网景公司(Netscape)发布了Navi…

前端小知识点(9):函数和对象之间的关系

目录 函数与对象之间的关系 代码演示 运行结果 函数与对象之间的关系 函数 有什么 : 函数也是对象 函数有:prototype 对象 有什么 对象:__proto__ 原型对象里面有什么:constructor 代码演示 //fun是一个函数&#xf…

Linux 给Qt应用软件创建图标启动

一、描述 Ubuntu源码编译安装Eclipse和Qt后,没有自动创建图标,每次启动需要进入到目录下运行脚本,比较麻烦。 可通过创建类似于windows系统的快捷方式进行快捷启动。 快捷方式一般以.desktop后缀命名,并保存到/usr/share/appli…

scheme解释器 C语言实现,使用Scala写了个简单的Scheme解释器

大家好,我使用scala实现了个简单的解释器,能够实现整数的加减乘除。我是照着快学 19章的 3 - 4 * 5 这个例子做的。思路也是按照它的来的。大概是这样 1)首先定义 factor是整数2)那么 term : ( factorfactor...) 就是一个完整的表达式了3) …

Android 的用户层 uevent处理机制

From: http://blog.csdn.net/linphusen/article/details/5667647 摘录几篇android研发日志 1 http://blog.csdn.net/linweig/archive/2010/06/01/5640697.aspx Firmware 加载原理分析----分析的比较透彻,我在wifimod…

前端小知识点(10):原型链

目录 原型链 : 代码1 运行结果1 代码二 运行结果2 原型链 : 每一个对象都有一个原型(__proto__),这个原型还可以拥有自己的原型,形成最终的原型链。 查找一个对象特定的属性或者方法,我们先去当前对象中找&#xff…

PS/2键盘鼠标接口各针脚定义

PS/2键盘鼠标接口各针脚定义(附图)好像很长时间也没有把这个最不被人重视的硬件问题提出来了,今天!我们就来谈谈键盘、鼠标PS/2接头各针脚定义(图)。针脚序号颜色名称简称意义电平1绿(G)Keyboard DATADATA (D)数据负线高电平2ReservervedN/C未定义预留空…

用css写个三角形

样例&#xff1a; 代码&#xff1a; html: <div class"tips"> <span class"caret"></span> 我是一个tooltip </div>css: .tips {width: 200px;height: 50px;line-height: 50px;text-align: center;position: relative;margin: 20p…

Linux系统查看版本和位数

一、查看系统版本 lsb_release -a piraspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie 二、查看系统所有信息 uname -a piraspberrypi:~…

Linux 环境变量PATH设置和查看etc/profile和bashrc的区别

一、查看环境变量 echo $PATH echo有“显示、印出”的意思&#xff0c;而 PATH 前面加的 $ 表示后面接的是变量&#xff0c;所以会显示出目前的 PATH. PATH&#xff08;一定是大写&#xff09;这个变量的内容是由一堆目录所组成的&#xff0c;每个目录中间用冒号&#xff08;:&…

android选择头像弹窗,Android App开发常用功能之用户头像选择-Go语言中文社区

前言现在的APP基本都有个人资料的填写&#xff0c;基本的都有头像的选择&#xff0c;支持拍照和从本地相册选择&#xff0c;剪切圆形头像的功能&#xff0c;现在用个小demo实现以下。下面看一下效果图上代码&#xff1a;主界面代码package com.example.androidpersonal_icon;im…