一、变量

定义

变量是松散型的
变量是保存特定值的一个名字
变量包含两种数据类型的值:基本数据类型的值和引用数据类型的值

基本数据类型值

基本数据类型值是一个简单的数据段,在内存中占用固定的空间,保存在栈内存中,当复制基本数据类型值的时候,js会创建一个当前值的副本,复制和被复制的值是完全独立的

引用数据类型值

引用数据类型值是多个值构成的对象,保存在堆内存中,引用数据类型的值是可以动态添加属性和方法的,当复制引用数据类型值的时候,复制的是一个内存地址(指针),复制的值和被复制的值都指向存储在堆内存中的同一个对象,包含引用数据类型值的变量其实包含的不是对象本身,而是该对象的内存地址,操作的是对象的引用的内存地址,而不是对象本身

访问变量

访问变量是按照值类型访问或者引用类型访问,值访问是直接查找栈内存中是否有这个值,引用类型访问是通过对象的内存地址查找保存在堆中的这个对象中是否有这个值。

传递变量

js中的参数传递只能是值传递,参数传递的过程其实就是值复制的过程,如果传递的参数是一个对象,那么就会把实参(对象)的内存地址复制给形参,这个内存地址是一个值,在作用域内形参的属性值发生变化后,实参的属性值也会发生变化。在这个过程中变量的值得类型是引用类型,但是传递的参数是一个值(内存地址),所以参数传递是值传递。

二、作用域

  • 每一个作用域都有一个与之关联的变量对象,作用域中定义的变量和函数都会保存在这个对象中
  • 所有变量都存在于某一个作用域中,作用域决定了变量的生命周期
  • 作用域分为全局作用域和函数作用域(局部作用域)
  • 局部作用域能访问本身作用域中的变量,也能访问父级作用域和全局作用域
  • 全局作用域只能访问全局作用域中定义的变量和函数,不能直接访问局部作用域中的任何数据
  • 变量的作用域有助于确定何时释放内存
  • 每一个作用域都有一个用于搜索变量和函数的作用域链
  • 某些语句可以在作用域链前端临时添加一个变量对象来延长作用域链,该变量对象会在代码执行后被移除。
  • 在js文件中引用另外一个js文件中的变量也会延长作用域链
  • js没用块级

三、内存

js具有自动垃圾回收机制,js所用的垃圾收集方式是标记清除,垃圾收集器在运行时,会给存储在内存中的所以变量加上标记,然后他会去掉作用域中的变量以及被作用域中的变量引用的变量的标记,而在此之后再被加上标记的变量而被视为将要删除的变量,原因是作用域中的变量已经无法访问到这些变量了。
解除引用可以确保有效的回收内存,数据不再有用时,最好释放其内存。

javascript第四弹——变量、作用域、内存的更多相关文章

  1. javascript第四课变量作用域

    局部变量: function f1() { var n1=0;  //局部变量 n1=10; //全局变量,当前页面均可调用 } n1=10;//全局变量 var n1=10;//全局变量 在方法内的 ...

  2. JavaScript解析顺序和变量作用域

    JavaScript基础之变量作用域. 一. 1.全局变量:全局变量的意思就是,在代码的不论什么地方都能够訪问到.注意:未定义 直接赋值的变量拥有全局属性. 2.局部变量:局部变量的意思就是,变量的作 ...

  3. JavaScript(四)变量

    变量的声明 在JavaScript程序中,使用一个变量之前应当使用关键字var进行声明,如下所示:var num;var sum; 也可以写成var num,sum,avg;如果只是声明变量而没有给变 ...

  4. javaScript的闭包 js变量作用域

    js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...

  5. 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存

    一   变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof     ...

  6. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

      5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...

  7. javascript笔记整理(变量作用域)

    变量的作用域(作用域:指的就是一段代码的作用范围) 一.变量的作用域 1.全局变量(在代码中任何地方都能够访问得到的变量,拥有全局的作用域) A.最外层函数外面定义的变量 var a=1; funct ...

  8. JavaScript中的垃圾回收和内存泄漏

    摘要: JS内存管理. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 程序的运行需要内存.只要程序提出要求,操作系统或者运行时就必须供给内存.所谓的内存泄漏简单来说是不再用到的 ...

  9. javascript高级程序设计第四章 变量、作用域和内存问题

    变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象  引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...

随机推荐

  1. 部署Office Web Apps Server并配置其与SharePoint 2013的集成

    部署Office Web Apps Server并配置其与SharePoint 2013的集成   Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.P ...

  2. 70 数组的Kmin算法和二叉搜索树的Kmin算法对比

    [本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array-vs-kmin-of-bst.html [分析] 数组的Kmin算法和二叉搜索树的Km ...

  3. Android读写assets、raw、sdard和工程文件的方法

    Android开发离不开对文件的操作,前面的文章“Android简易数据存储之SharedPreferences”和“Android数据存储之SQLite的操作”,分别讲解了简单的数据的存储和数据库数 ...

  4. 一些LUA函数(转载)

    转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1.assert (v [, message]) 功能:相当 ...

  5. hdu 1050 Moving Tables 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 这道题目隔了很久才做出来的.一开始把判断走廊有重叠的算法都想错了.以为重叠只要满足,下一次mov ...

  6. struts2的s:iterator 标签 详解

    s:iterator 标签有3个属性:value:被迭代的集合id   :指定集合里面的元素的idstatus 迭代元素的索引1:jsp页面定义元素写法 数组或list <s:iterator ...

  7. Java内存访问重排序笔记

    >>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ...

  8. 在MVC3或asp.net中修改KindEditor实现上传图片时添加水印

    主要修改两个文件:image.js和upload_json.ashx文件. 一.修改image.js文件 打开kindeditor/plugins/image目录下的image.js文件,找到 '&l ...

  9. javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)

    最后一例,搞得快.三天之内走了一次.. 下一步,面象对像的javascript编程. function Dictionary(){ var items = {}; this.has = functio ...

  10. C#控制管理VisualSVN Server

    VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...