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中是不允许直接访问内存中的位置; 函数的参数 ...
随机推荐
- 局域网所有机器都能连接MySQL数据库的设置命令
Sql代码: grant all privileges on *.* to root@"%" identified by 'abc' with grant option; flus ...
- static-const 类成员变量
[本文链接] http://www.cnblogs.com/hellogiser/p/static-const.html [分析] const数据成员必须在构造函数初始化列表中初始化; static数 ...
- codeforces A. Sereja and Bottles 解题报告
题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...
- javascript十六进制数字和ASCII字符之间转换
var hex="0x29";//十六进制 var charValue = String.fromCharCode(hex);//生成Unicode字符 var charCode ...
- 取余运算(codevs 1497)
题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描 ...
- php 字符串处理
<?php $a = " n001|n002|n003|n004 "; //echo strlen($a);//取字符串的长度 //var_dump(strcmp(" ...
- 菜鸟学Linux命令:tail命令 查看日志
tail 命令用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理. tail命令常用来查看日志文件.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filenam ...
- Jquery的tmpl
jquery 中的tmpl类似于asp.net中的datalist控件. 首选,在页面代码中加入两行,jquery的js文件引用 <script src="http://code.jq ...
- Oracle数据库表设计时的注意事项
表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...
- C#学习笔记——Show()与ShowDialog()的区别
用Show()调用的窗体不会返回任何值,在使用form.Show()显示form以后,会马上继续执行form.Show()后面的语句.而用ShowDialog()调用的窗体会返回一个DialogRes ...