- ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,其中基本类型值是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象;
- 对于5种基本类型数据:undefined, null,boolean,number和string,采用按值访问,因为可以操作保存在变量中的实际的值;
- 对于引用类型的值而言,JavaScript并不能直接访问内存中的位置,也就是说不能直接操作对象的内存空间,在操作对象时,实际上是在操作对象的引用而非实际的对象。
- 在从一个变量向另一个变量复制基本类型值和引用类型值的时候,也存在不同:
- 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上(所以对新创建的变量的值的操作,不会影响原先的变量);
- 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。实际上这个值的副本是一个指针,指向存储在堆中的一个对象,所以结果是两个变量实际上引用同一个对象,所以改变其中一个变量,将对另一个变量也产生同样的影响。
- ECMAScript中的所有函数的参数传递,都是按值传递的。即:把函数外部的值复制给函数内部的参数。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。
- instanceof: result = variable instanceof constructor;
- alert(person instanceof Object); //变量person是Object么
- alert(person instanceof Array); //变量person是Array么
- 作用域链(scope chain):保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终是当前执行的代码所在环境的变量对象,如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即arguments对象。下一个变量对象来自包含(外部)环境,而再下一个对象则来自下一个包含环境。这样,一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。
- 使用var声明的变量会自动添加到最接近的环境中。
- 基本类型值和引用类型值具有以下特点:
- 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
- 从给一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;
- 引用类型值是对象,保存在堆内存中;
- 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向这个值的一个副本;
- 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
- 确定一个值是哪一种基本类型可以使用typeof操作符,而确定一个值是哪一种引用类型可以使用instanceof操作符、
- 关于执行环境:
- 执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;
- 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;
- 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;
- 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;
- 变量的执行环境有助于确定应该何时释放内存;
- 关于JavaScript的垃圾收集例程:
- 离开作用域的值将被自动标记为可以回收,因此在垃圾收集期间被删除;
- “标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后在回收内存;
- “引用计数”垃圾收集算法是跟踪记录所有值被引用的次数,JavaScript引擎目前都不再使用这种算法;
- 解除变量的引用(比方说:var globalVar = createdVar(“things”); globalVar = null;)有助于消除循环引用的现象,并且有益于垃圾收集。为了确保有效地回收内存,应该及时接触不再使用的全局对象、全局对象属性以及循环引用变量的引用。
JavaScript学习笔记—— 4. 变量、作用域和内存问题
转载于:https://www.cnblogs.com/mintcat/p/6109255.html
相关文章:
ApacheCN 学习资源汇总 2019.3
【主页】 apachecn.org 【Github】ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 微博:ApacheCN知乎:ApacheCNCSDN简书OSChina博客园We are ApacheCN Open Source Organization, not ASF! We are fans of AI, and have no relationship w…

python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)
树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ###################…
【HDU】3635 Dragon Balls (带权并查集 一)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid3635 【问题描述】 有标号为1到n的n个龙珠,分别放在对应标号为1到n的n个城市里。 下面有两种操作: T A B表示把A龙珠所在城市的所有龙珠都转移到B龙珠所在的城市中 Q A 表示查询A,需…

php源码安全加密之PHP混淆算法.
php源码安全加密的前世今生,本想发在教程区中.不知道怎么发,就写在这里面吧.PHP加密,解密是一直的话题,本人菜鸟,今天就简单向大家介绍一下并说说其中原理.提供一些加密的混淆算法.一\PHP的加密总体上来说分以下2种:1\扩展组件类加密,代表有:zend\ionCube\SG\php_screw\bcompil…

Element 2.6.0 发布,基于 Vue 2.0 的桌面端组件库
开发四年只会写业务代码,分布式高并发都不会还做程序员? Element 2.6.0 发布了,Element 是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,提供了配套设计资源,帮助你的网站快速成型。由饿了么公…
【Python】随机函数
import random 1、random.random() 2、random.uniform(a,b) 3、random.randint(a,b) 4、random.randrange([start],stop[, step]) 5、random.choice(sequence) 6、random.shuffle(x[, random]) 7、random.sample(sequence,k) import random 1、random.random() 返回随…

IOS/Android模拟器运行APP调试方法
真机不是那么好获取的,模拟器用起来更方便 ios 安装ios-sim 安装 ios-sim,获取 APP 完整的product的文件包。 $ npm i -g ios-sim 启动app # ios-sim launch *.app - -devicetypeid 本地模拟器支持机型类型 id $ ios-sim launch **/BaiduBoxApp.app --d…

python数据结构与算法:单向链表
单链表:python实现及其对应的 增删查检 操作 ##################### P4.1-P4.8 单向链表 ########################### #coding:utf-8 class Node(object):def __init__(self,elem):self.elem elemself.next Noneclass SinglelinkList(object):""&quo…

Vue性能优化:如何实现延迟加载和代码拆分?
移动优先方法已经成为一种标准,但不确定的网络条件导致应用程序快速加载变得越来越困难。在本系列文章中,我将深入探讨我们在Storefront应用程序中所使用的Vue性能优化技术,你们也可以在自己的Vue应用程序中使用它们来实现快速加载。 Webpack…

GitHub怎样fork别人代码到自己仓库并进行贡献
在过程中可能遇到这个问题:https://www.cnblogs.com/q1104460935/p/8275833.html 这个博客应该可以解决 比如说现在有一个很牛逼的项目,我们进入项目地址, 想将这个项目复制到自己的github仓库,然后你还想将 仓库中的代码拉取到…

python数据结构与算法:单向循环列表
单向循环列表:python实现,及其对应的 增删查检 操作 ##################### P4.9-P4.12 循环链表 ########################### #coding:utf-8 class Node(object):def __init__(self,elem):self.elem elemself.next None class SinglecycleList(ob…

http权威指南-http连接管理
2019独角兽企业重金招聘Python工程师标准>>> HTTP连接管理 浏览器解析URL流程: 浏览器解析出域名;浏览器查询这个主机名的IP地址;浏览器获得端口号;浏览器发起到主机名IP地址端口的80连接;浏览器向服务器发…

在macos上基于python2.7安装PyQt5
在macos上基于python2.7安装PyQt5 在python3上面安装PyQt5是十分简单的,可是,在python2.7上安装这个东西,着实让人折腾了一把。要总结一下,年纪大了,记性不好。 首先要安装最新版的Qt和python2,命令如下&am…

python数据结构与算法:二分查找
二分查找:python 实现def binary_seaech(alist,item):"""二分查找 递归实现"""n len(alist)if n > 0:mid n // 2if alist[mid] item:return Trueelif item < alist[mid]:return binary_seaech(alist[:mid],item)else:retur…

使用maven镜像
综述 用maven做项目,最郁闷的莫过于某些依赖库下载不了。被墙了,你懂的。使用maven镜像仓库及其重要,特别是国内的镜像,可以有效缓解被墙疼痛。 常用的镜像 国外镜像 ibiblio.org <mirror> <id>ibiblio</id> &…

Jupyter Notebook 快捷键(基本)
Jupyter Notebook 快捷键 Jupyter Notebook 有两种键盘输入模式。编辑模式,允许你往单元中键入代码或文本;这时的单元框线是绿色的。命令模式,键盘输入运行程序命令;这时的单元框线是灰色。 命令模式 (按键 Esc 开启) Enter : …

关于二叉树的几个必须掌握的实现
The best way to end your fear is to face it yourself. 结束恐惧的最佳办法就是自己面对。本分分享了二叉搜索树的几种实现,由简入繁。说句题外话,马上又是金三银四的季节了,无论跳不跳槽,增加自己的知识储备总是没错的。从代码…

python数据结构与算法:队列与双端队列
双端队列: #################队列#################### #coding:utf-8 """ Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素 remove_front() 从队头删除一个item元素 remove_rear() 从…

view5.3登录桌面提示当前可用桌面资源不足
问题描述:用户反馈有个桌面经常提示当前可用桌面资源不足,开始的时候反复重启还可以使用,今天发现彻底无法登录了。解决方法:首先登录到view administrator管理平台查看该桌面发现状态是可用,说明桌面正常,…

【HDU】4706 Children's Day(模拟)
http://acm.hdu.edu.cn/showproblem.php?pid4706 该题没有输入,直接输出不同形状大小的N,在输出不同形状N的时候是要用到26个字母,并且是循环输出 #include <iostream>using namespace std;char map[60][60]; char a[] "abcdef…

详解原生AJAX请求demo(兼容IE5/6)
function createXHR(){ // 检测原生XHR对象是否存在if ( window.XMLHpptRequest ){// 如果存在就返回新实例return new XMLHpptRequest();} else { // 如果不存在就检测ActiveX对象// 兼容IE5/6return new ActiveXObject(Microsoft.XMLHttp);} }// 在所有的浏览器中创建XHR对象…

【POJ】3268 Silver Cow Party (将有向图的边反转)
问题链接:http://poj.org/problem?id3268 【问题描述】 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1…N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectio…

项目管理深入理解08--成本管理
成本管理一章非常的重要,尤其是对于程序员来说,这方面非常的薄弱,但这部分知识无论是在项目管理中还是日常生活中都灰常重要,不然很难成为一个财务自由的程序员。此外,由于财务方面知识点比较多,特增加经济…

python数据结构与算法:双向链表
双向链表: ###################### P4.13-P4. 双向链表 ########################### # import singlelinkListclass Node(object):def __init__(self,item):self.elem itemself.next Noneself.prev None# class DoublelinkList(singlelinkList): #继承 class …

如何开发一个区块链应用程序
区块链是一项巧妙的发明,有望使数字世界更加安全和分散。通过允许数字信息的分发而不是复制,区块链技术创建了一种新型互联网。最初是为数字货币比特币而设计的,现在科技界正在寻找该技术的其他潜在用途。在不久的将来,我们将看到…

python数据结构与算法:栈
栈: Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 is_empty() 判断栈是否为空 size() 返回栈的元素个数 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek(…

【PAT (Basic Level) 】1014 福尔摩斯的约会 (20 分)
大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的…

菜鸟物流云是如何帮助快递合作伙伴解决双11巨大业务负荷的?
物流云双11 双11前,菜鸟物流云共接入12家合作伙伴,全部参加双11大促活动,作为物流云的首次双11,尤其是经过了快递公司的大考经验,事实证明项目是靠谱的。 双11前已经整体上云的快递合作伙伴2家,韵达和天天&…

安装H3C的各种问题
HCL安装完成后,启动HCL失败;提示:“当前系统用户名中包含非ASCII字符”问题?HCL只能安装装在英文路径下,如果用户名为中文或者安装路径有中文目录,就会出现此问题,请确保系统用户名和安装路径中…

前景背景分割——ostu算法的原理及实现 OpenCV (八)
OpenCV 【八】——前景背景分割——ostu算法的原理及实现 实验结果代码实现实现原理参考资料实验结果 代码实现 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; //计算图像灰度直方图 Mat calcgrayhist(const Mat&am…