javascript高级语言程序设计四
来源:互联网 发布:安卓免费源码分享网站 编辑:程序博客网 时间:2024/05/17 02:04
变量包含两种数据类型的值
基本类型:指的是简单的数据类型。
引用类型:指的是哪些可能由多个值构成的数据对象。
复制变量值:
var num1=5
var num2=num1;
num1
5
复制对象后
num2
5
num1
5
num1中保存的变量值是5,当使用num1的值初始化num2时,num2中也保存了值5,但num1中的5,与num2中的5,是完全独立的,该值只是num1中5的一个副本。
var obj1=newObject();
var obj2=obj1;
obj1.name="yht";
alert(obj2.name);//yht
代码内容如下所示
function addC(num)
{
return 10+num
};
var count=20;
varresult=addC(count);
alert(count);//20
alert(result);//result
function setName(obj)
{
obj.name="Nicholas"
};
var person=newObject();
setName(person);
alert(person.name);//"Nicholas"
如上说示,可能有的人会想是不是引用类型传的是地址,其实部是,只是引用的指针并没有改变罢了。
function setName(obj)
{
obj.name="Nicholas";
obj =new Object();
obj.name="Greg"
}
var person =newObject();
setName(person);
alert(person.name);//Nicholas
如上所示充分证明了,引用类型不是按址传递的而也是按值传递的。在函数内部修改了参数的值,但原始的引用任然保持未变。
检测类型的函数:
typeof: 检测普通变量类型的最佳工具。
instanceof: 检测引用类型,对象的最佳工具。
执行环境及作用域:
当代码在一个环境中执行,会创建变量对象的一个作用域链,作用域链的用途,是保证对执行环境由权访问的所有变量和函数的有序访问。
var color="blue";
functionchangeColor()
{
var anycolor ="red";
function swapColors()
{
var tempcolor =anycolor;
anycolor=color;
color=tempcolor
};
swapColors();
}
changeColor();
如上代码段分为三个环境,全局环境-changeColor()-swapColor()这三个环境中父级环境都不可以访问自己环境中的变量,而子级环境中的变量是可以访问父级环境中的变量的。
作用域延生:
使用var声明的变量会自动被添加到最接近的环境中,在函数内部,最接近的环境就是函数的局部环境。如果初始化变量时,没有使用var声明,该变量会自动添加到全局环境。在局部作用域中,变量的搜索是从内往外一层一层的搜索的,如上图所示先搜索swapColors--->changeColors()-->windows;依次搜索这些环境。
javascript的垃圾回收机制:
最常用的是标记清楚(mark-and-sweep)定义了一个“进入环境“的变量列表与一个”离开环境“的变量列表,当变量进入环境时,就被标记为”进入环境“。离开时被标记为”离开环境“最后垃圾回收器再完成清理。
管理内存:
确保占用最少的内存可以让页面性能更好,而优化内存占用的最佳方式,就是为执行中的代码只保留必要的数据。一旦数据不再由用,最好通过将其值设置为null来释放其引用。这个做法叫做解除引用。
functioncreatePerson()
{
var localPerson=new Object();
localPerson.name=name;
return localPerson;
}
var globalPerson=createPerson("Nicholas");
//手动释放内存
globalPerson=null;
总结:
- 基本类型占用固定的内存空间,保存在栈中
- 从一个变量值到另一个变量值赋值,会创建这个值的一个副本
- 引用类型的值是对象,保存在堆中。
- 包含引用类型值的变量实际上包含的并不是对象本身而是一个指向该对象的指针。从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。
- 确定一个值是哪中基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。
- javascript高级语言程序设计四
- javascript高级语言程序设计之一
- javascript高级语言程序设计五
- javascript高级语言程序设计之二
- javascript之高级语言程序设计三
- javascript 高级程序设计 四
- javascript高级程序设计笔记(四)
- 《JavaScript高级程序设计》读书笔记(四)
- Javascript高级程序设计 读书笔记四
- 《JavaScript高级程序设计》总结四
- 求高级语言程序设计答案
- 高级语言程序设计第三次作业
- C语言程序设计<四>
- C语言程序设计谭浩强版 四
- javascript高级程序设计学习(四)----------继承
- javascript高级程序设计总结之四
- javascript高级程序设计笔记(四)
- javascript高级开发学习笔记四
- 将ACCESS数据库迁移到SQLSERVER数据库方法(图文详解)
- 简单实现分页
- Retrofit的进阶之路(二)添加请求头和上传图片
- 关于自定义dialog中textview的显示的问题
- 不忘初心,2017年加油!!
- javascript高级语言程序设计四
- 多线程下载时HTTP response code: 416 解决方案
- 在线小说网站的设计与实现(附源码)
- Miller-Rabin随机性素数测试方法 & [CodeVS 1702] 素数判定2
- 关于调用js函数失败问题及解决
- 剑指offer-----滑动窗口的最大值(java版)
- C++ 虚函数表解析
- Action直接访问ServletAPI
- github 删除项目