javascript第四弹——变量、作用域、内存
一、变量
定义
变量是松散型的
变量是保存特定值的一个名字
变量包含两种数据类型的值:基本数据类型的值和引用数据类型的值
基本数据类型值
基本数据类型值是一个简单的数据段,在内存中占用固定的空间,保存在栈内存中,当复制基本数据类型值的时候,js会创建一个当前值的副本,复制和被复制的值是完全独立的
引用数据类型值
引用数据类型值是多个值构成的对象,保存在堆内存中,引用数据类型的值是可以动态添加属性和方法的,当复制引用数据类型值的时候,复制的是一个内存地址(指针),复制的值和被复制的值都指向存储在堆内存中的同一个对象,包含引用数据类型值的变量其实包含的不是对象本身,而是该对象的内存地址,操作的是对象的引用的内存地址,而不是对象本身
访问变量
访问变量是按照值类型访问或者引用类型访问,值访问是直接查找栈内存中是否有这个值,引用类型访问是通过对象的内存地址查找保存在堆中的这个对象中是否有这个值。
传递变量
js中的参数传递只能是值传递,参数传递的过程其实就是值复制的过程,如果传递的参数是一个对象,那么就会把实参(对象)的内存地址复制给形参,这个内存地址是一个值,在作用域内形参的属性值发生变化后,实参的属性值也会发生变化。在这个过程中变量的值得类型是引用类型,但是传递的参数是一个值(内存地址),所以参数传递是值传递。
二、作用域
- 每一个作用域都有一个与之关联的变量对象,作用域中定义的变量和函数都会保存在这个对象中
- 所有变量都存在于某一个作用域中,作用域决定了变量的生命周期
- 作用域分为全局作用域和函数作用域(局部作用域)
- 局部作用域能访问本身作用域中的变量,也能访问父级作用域和全局作用域
- 全局作用域只能访问全局作用域中定义的变量和函数,不能直接访问局部作用域中的任何数据
- 变量的作用域有助于确定何时释放内存
- 每一个作用域都有一个用于搜索变量和函数的作用域链
- 某些语句可以在作用域链前端临时添加一个变量对象来延长作用域链,该变量对象会在代码执行后被移除。
- 在js文件中引用另外一个js文件中的变量也会延长作用域链
- js没用块级
三、内存
js具有自动垃圾回收机制,js所用的垃圾收集方式是标记清除,垃圾收集器在运行时,会给存储在内存中的所以变量加上标记,然后他会去掉作用域中的变量以及被作用域中的变量引用的变量的标记,而在此之后再被加上标记的变量而被视为将要删除的变量,原因是作用域中的变量已经无法访问到这些变量了。
解除引用可以确保有效的回收内存,数据不再有用时,最好释放其内存。
javascript第四弹——变量、作用域、内存的更多相关文章
- javascript第四课变量作用域
局部变量: function f1() { var n1=0; //局部变量 n1=10; //全局变量,当前页面均可调用 } n1=10;//全局变量 var n1=10;//全局变量 在方法内的 ...
- JavaScript解析顺序和变量作用域
JavaScript基础之变量作用域. 一. 1.全局变量:全局变量的意思就是,在代码的不论什么地方都能够訪问到.注意:未定义 直接赋值的变量拥有全局属性. 2.局部变量:局部变量的意思就是,变量的作 ...
- JavaScript(四)变量
变量的声明 在JavaScript程序中,使用一个变量之前应当使用关键字var进行声明,如下所示:var num;var sum; 也可以写成var num,sum,avg;如果只是声明变量而没有给变 ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存
一 变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
- javascript笔记整理(变量作用域)
变量的作用域(作用域:指的就是一段代码的作用范围) 一.变量的作用域 1.全局变量(在代码中任何地方都能够访问得到的变量,拥有全局的作用域) A.最外层函数外面定义的变量 var a=1; funct ...
- JavaScript中的垃圾回收和内存泄漏
摘要: JS内存管理. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 程序的运行需要内存.只要程序提出要求,操作系统或者运行时就必须供给内存.所谓的内存泄漏简单来说是不再用到的 ...
- javascript高级程序设计第四章 变量、作用域和内存问题
变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象 引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...
随机推荐
- django signal 浅析
默认的signals极其参数 (django 1.6.5) 模型的(django/db/models/signal.py): from django.dispatch import Signal cl ...
- [颓废] 改某人的WebGL light mapping demo并9xSSAA
渲染图(4k) 链接: http://pan.baidu.com/s/1bnB4Wqz 密码: 8839 2px高斯模糊+立方缩小AA: 链接: http://pan.baidu.com/s/1mg ...
- js判空
2014年9月3日 11:36:10 转载的: http://blog.sina.com.cn/s/blog_755168af0100vsik.html typeof用法 typeof的运算数未定义, ...
- codeforces A. Rook, Bishop and King 解题报告
题目链接:http://codeforces.com/problemset/problem/370/A 题目意思:根据rook(每次可以移动垂直或水平的任意步数(>=1)),bishop(每次可 ...
- HDU 5512 Pagodas (gcd)
题目:传送门. 题意:t组数据,每组数据给定n,a,b,a!=b,在[1,n]的这些点中,每次选取a+b或a-b或b-a点,选取过的点在下次选取的时候可以当做ab来用继续选取,谁不能继续选取谁就输,问 ...
- POSIX线程
大多数线程函数以pthread_开头,.h为pthread.h, 用-lpthread来链接线程库. 编写多线程时,定义宏_REENTRANT告诉编译器需要可重入,此宏必须位于任何#include ...
- Android之ExpandableListView
ExpandableListView可以用来表现多层级的listView,本文主要是ExpandableListView的一个简单实现 布局文件 <LinearLayout xmlns:andr ...
- Vim折叠模式设置
参考文章:http://www.cnblogs.com/welkinwalker/archive/2011/05/30/2063587.html set foldmethod=indent " ...
- linux中的解压,压缩命令
tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...
- css div 清理浮动的2种方法
使用float属性,导致div的内容发生浮动,浮动带来负影响: 1.背景不能显示 2.边框撑不开 3.div的padding和margin不能起作用: 处理float浮动的两种方式: 1.div的子类 ...