学习要点
- 了解内存管理
- 掌握全局函数的使用
知识点
基本类型和引用类型
- 基本类型值有:undefined,NUll,Boolean,Number和String这些类型分别在内存中占有固定的大小空间,例如:数值型在内存中占有八个字节,布尔值只占有一个字节......
他们的值保存在栈空间,我们通过按值来访问的。 - 引用类型:对象、数组、函数。
引用类型内存中占有的空间不固定,但是内存地址大小是固定的,因此存储的实际上是数据的内存地址。
- 在变量复制时候,基本类型复制的是值本身,而引用类型复制的是地址. 基本类型复制
- 函数的参数都是按值传递的
执行环境及作用域
- 执行环境定义了变量或函数有权访问其他数据。
- 全局执行环境是最外围的执行环境,在web浏览器中,全局执行环境是window对象,因此,所有的全局变量的函数都是作为window的属性和方法创建的。
- 变量没有在函数内声明或者声明的时候没有带var就是全局变量,拥有全局作用域,window对象的所有属性拥有全局作用域;在代码任何地方都可以访问,函数内部声明并且以var修饰的变量就是局部变量,只能在函数体内使用,函数的参数虽然没有使用var但仍然是局部变量。
- 内部环境可以访问所有的外部环境,但是外部环境不能访问内部环境中的任何变量和函数。
- 在变量的查询中,访问局部变量要比全局变量快。
内存管理
JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收。
如果程序简单,内存管理不会对你造成太多困扰。但是复杂的程序内存管理是很重要的。这节课我们的学习任务是了解内存管理概念,以及一些注意事项,更深入的内容,随着学习的深入逐步理解。
- 内存的生命周期,JS环境中分配的内存一般有如下生命周期:
- 内存分配:当我们申明变量、函数、对象的时候,系统会自动为他们分配内存
- 内存使用:即读写内存,也就是使用变量、函数等
- 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存
- 垃圾回收算法:对垃圾回收算法来说,核心思想就是如何判断内存已经不再使用了。(了解)
- JavaScript 的内存管理注意事项
- 避免不必要的定义全局变量
当一个变量被定义在全局作用域中,默认情况下JavaScript 引擎就不会将其回收销毁。如此该变量就会一直存在于老生代堆内存中,直到页面被关闭。
- 及时解除不再使用的变量引用,即将其赋值为 null;
在内存回收周期中,收回内存不是立即收回,浏览器每隔一段时间检查一次.
- 合理的使用函数,函数中的局部变量函数执行结束后就会自动释放内存。
- ......更多内存管理的技巧会放在案例中演示,这里暂做了解。
全局函数
全局函数和属性可用于所有内建的 JavaScript 对象。全局函数又叫顶层函数或系统函数。
- parseInt() 函数可解析一个字符串,并返回一个整数。
- parseFloat() 函数可解析一个字符串,并返回一个浮点数。
- isNaN() 函数用于检查其参数是否是非数字值。
- String() 函数把对象的值转换为字符串。
- Number() 把对象的值转换为数字。
- eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
该方法只接受字符串作为参数,要计算的字符串中必须含有要计算的 JavaScript 表达式或要执行的语句。
- escape() 对字符串进行编码。
- 返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
- 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
- unescape() 对由 escape() 编码的字符串进行解码。
- encodeURI() 把字符串编码为 URI。
URI :Uniform Resource Identifier,统一资源标识符;
- decodeURI() 解码某个编码的 URI。
- decodeURIComponent() 解码一个编码的 URI 组件。
- encodeURIComponent() 把字符串编码为 URI 组件。
- 三种编码方式的区别
- escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
主要是为了防止特殊字符造成计算错误时候应用
- encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
防止特殊字符串造成URI的传递错误,一般用于页面跳转的时候。
- encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
防止URI参数中特殊字符串造成参数读取错误,一般用来传递参数。
- isFinite() 检查某个值是否为无穷大的数。 如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。
- Infinity无穷大(系统定义常量)
- -Infinity无穷小(系统定义常量)
代码
1 <!DOCTYPE html>
2 <html lang="zh-cn">
3 <head>
4 <meta charset="utf-8">
5 <title>课堂演示</title>
6 </head>
7 <body>
8 <script>
9 // 为变量分配内存
10 var m= 123;
11 var n = "JavaScript";
12 // 为对象分配内存
13 // var person = {
14 // age: 25,
15 // name: '张三'
16 // };
17
18 // // 为函数分配内存
19 // function sum(m, n) {
20 // return m+n;
21 // }
22
23 // var str="x=10;y=20;alert(x*y)";
24 // alert(str)
25 // eval(str)
26
27 var str='javascript进阶应用教程';
28 var str1=escape(str);
29 var str2=unescape(str1)
30 document.write(str+ "<br />")
31 document.write('str编码后:'+str1+ "<br />")
32 document.write('str1解码后:'+str2+ "<br />")
33 </script>
34 </body>
35 </html>