1. ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,其中基本类型值是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象;
  2. 对于5种基本类型数据:undefined, null,boolean,number和string,采用按值访问,因为可以操作保存在变量中的实际的值;
  3. 对于引用类型的值而言,JavaScript并不能直接访问内存中的位置,也就是说不能直接操作对象的内存空间,在操作对象时,实际上是在操作对象的引用而非实际的对象。
  4. 在从一个变量向另一个变量复制基本类型值和引用类型值的时候,也存在不同:
    • 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上(所以对新创建的变量的值的操作,不会影响原先的变量);
    • 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。实际上这个值的副本是一个指针,指向存储在堆中的一个对象,所以结果是两个变量实际上引用同一个对象,所以改变其中一个变量,将对另一个变量也产生同样的影响。
  5. ECMAScript中的所有函数的参数传递,都是按值传递的。即:把函数外部的值复制给函数内部的参数。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。
  6. instanceof: result  =  variable instanceof constructor;
    • alert(person instanceof Object); //变量person是Object么
    • alert(person instanceof Array); //变量person是Array么
  7. 作用域链(scope chain):保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终是当前执行的代码所在环境的变量对象,如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即arguments对象。下一个变量对象来自包含(外部)环境,而再下一个对象则来自下一个包含环境。这样,一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。
  8. 使用var声明的变量会自动添加到最接近的环境中。
  9. 基本类型值和引用类型值具有以下特点:
    • 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
    • 从给一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;
    • 引用类型值是对象,保存在堆内存中;
    • 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向这个值的一个副本;
    • 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
    • 确定一个值是哪一种基本类型可以使用typeof操作符,而确定一个值是哪一种引用类型可以使用instanceof操作符、
  10. 关于执行环境:
    • 执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;
    • 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;
    • 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;
    • 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;
    • 变量的执行环境有助于确定应该何时释放内存;
  11. 关于JavaScript的垃圾收集例程:
    • 离开作用域的值将被自动标记为可以回收,因此在垃圾收集期间被删除;
    • “标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后在回收内存;
    • “引用计数”垃圾收集算法是跟踪记录所有值被引用的次数,JavaScript引擎目前都不再使用这种算法;
    • 解除变量的引用(比方说:var globalVar = createdVar(“things”); globalVar = null;)有助于消除循环引用的现象,并且有益于垃圾收集。为了确保有效地回收内存,应该及时接触不再使用的全局对象、全局对象属性以及循环引用变量的引用。

转载于:https://www.cnblogs.com/mintcat/p/6109255.html

JavaScript学习笔记—— 4. 变量、作用域和内存问题相关推荐

  1. javascript权威指南 学习笔记之变量作用域

    最近一直在看<javascript权威指南 第五版>,变量作用域这一章,看得真的有点累.不过,收获还是多多. 不知道,大家对语言中变量的"声明"与"定义&qu ...

  2. php学习笔记0001 变量作用域

    <?php /* 2015-8-6 php学习笔记0001 函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问. 函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行 ...

  3. PowerBuilder学习笔记(变量作用域)

    变量的作用域不同,可分为四种: 全局变量(Global Variable): 作用域为整个应用程序. 实例变量(Instance Variable): 在特定的对象中,随着对象的打开.关闭而创建和删除 ...

  4. [Javascript学习笔记]JS变量不声明也能使用,直接天下无敌!

    认识变量 什么是变量 变量 变量的输入与输出 同时声明多个变量 声明变量特殊情况 变量命名规范 什么是变量 本质:变量是程序在内存中申请的一块用来存放数据的空间. 变量 变量的输入与输出 <!D ...

  5. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  6. JavaScript高级编程设计(第三版)——第四章:变量作用域和内存问题

    系列文章目录 第二章:在html中使用javaScript 第三章:基本概念 第四章:变量作用域和内存问题 第五章:引用类型 目录 系列文章目录 前言 一.基本数据类型和引用类型的值? 1.数据类型 ...

  7. JavaScript学习笔记(第二部分)总共四部分

    JavaScript学习笔记(第二部分)总共四部分 4 对象(Object) 字符串String.数值Number.布尔值Boolean.空值Null.未定义Undefined是基本的数据类型,这些数 ...

  8. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  9. 千锋JavaScript学习笔记

    千锋JavaScript学习笔记 文章目录 千锋JavaScript学习笔记 写在前面 1. JS基础 1.1 变量 1.2 数据类型 1.3 数据类型转换 1.4 运算符 1.5 条件 1.6 循环 ...

最新文章

  1. 为何程序员们没事总爱戴个耳机,看完恍然大悟......
  2. Python基本语法_函数_参数的多类型传值
  3. python教程:dict字典常用方法总结,数据解构(解包)
  4. [Windows Server 2012] 安装PHP+MySQL方法
  5. 自适应滤波器设计及matlab实现,(终稿)自适应滤波器设计及Matlab实现.doc(OK版)...
  6. SkyDNS2源码分析
  7. Java垃圾回收jconsole分析
  8. 本地方法接口和本地方法栈总结
  9. 【c4d学习笔记】OC渲染器安装问题
  10. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(上篇)(期末大作业、课程设计、毕业设计、结课项目)
  11. ERP系统和CRM系统
  12. css方块跳动且颜色变化,CSS3 波动的方块
  13. 夜神模拟器 Nox Player 雷电模拟器 掉线 连不上 运行不显示的解决方案
  14. 【Linux常用指令】grep命令常见用法
  15. iOS7(Xcode5)中隐藏状态栏的方法
  16. 嵌入式计算机分类,嵌入式系统的分类
  17. 记录一下环状RNA高通量测序数据分析pipeline
  18. 创造属于自己的注册码
  19. 程序员免费学习编程的5个网站,你知道几个?
  20. [转帖]Linux查找文件6个高效工具

热门文章

  1. 记录CSS3 target伪类简介
  2. OpenCV 【十八】图像平滑处理/腐蚀与膨胀(Eroding and Dilating)/开闭运算,形态梯度,顶帽,黑帽运算
  3. NDKJNI Android 相关资料整理(四)
  4. 《OpenMP编译原理及实现技术》摘录
  5. Linux下遍历文件夹的实现
  6. 【FFmpeg】函数详解(一)
  7. 双绞线是计算机网络的一种通信线路吗,计算机网络环境的信道传输技术分析
  8. java程序ssh置顶_使用shell脚本启动远程(SSH)Java应用程序不会返回本地提示
  9. 查看正在执行的事务_看懂sql_trace--分析执行计划及CBO行为
  10. mysql如何避免特殊字符查询_如何避免MySQL中的特殊字符?