【JavaScript进阶】函数

基本类型和引用类型

  1. 基本类型值有:undefined,NUll,Boolean,Number和String

    这些类型分别在内存中占有固定的大小空间,例如:数值型在内存中占有八个字节,布尔值只占有一个字节......
    他们的值保存在栈空间,我们通过按值来访问的。

  2. 引用类型:对象、数组、函数。

    引用类型内存中占有的空间不固定,但是内存地址大小是固定的,因此存储的实际上是数据的内存地址。

  3. 在变量复制时候,基本类型复制的是值本身,而引用类型复制的是地址.

    基本类型复制

    引用类型复制

  4. 函数的参数都是按值传递的

执行环境及作用域

  • 执行环境定义了变量或函数有权访问其他数据。
  • 全局执行环境是最外围的执行环境,在web浏览器中,全局执行环境是window对象,因此,所有的全局变量的函数都是作为window的属性和方法创建的。
  • 变量没有在函数内声明或者声明的时候没有带var就是全局变量,拥有全局作用域,window对象的所有属性拥有全局作用域;在代码任何地方都可以访问,函数内部声明并且以var修饰的变量就是局部变量,只能在函数体内使用,函数的参数虽然没有使用var但仍然是局部变量。
  • 内部环境可以访问所有的外部环境,但是外部环境不能访问内部环境中的任何变量和函数。
  • 在变量的查询中,访问局部变量要比全局变量快。

内存管理

JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收。

如果程序简单,内存管理不会对你造成太多困扰。但是复杂的程序内存管理是很重要的。这节课我们的学习任务是了解内存管理概念,以及一些注意事项,更深入的内容,随着学习的深入逐步理解。

  1. 内存的生命周期,JS环境中分配的内存一般有如下生命周期:

    1. 内存分配:当我们申明变量、函数、对象的时候,系统会自动为他们分配内存
    2. 内存使用:即读写内存,也就是使用变量、函数等
    3. 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存
  2. 垃圾回收算法:对垃圾回收算法来说,核心思想就是如何判断内存已经不再使用了。(了解)
  3. JavaScript 的内存管理注意事项
    1. 避免不必要的定义全局变量

      当一个变量被定义在全局作用域中,默认情况下JavaScript 引擎就不会将其回收销毁。如此该变量就会一直存在于老生代堆内存中,直到页面被关闭。

    2. 及时解除不再使用的变量引用,即将其赋值为 null;

      在内存回收周期中,收回内存不是立即收回,浏览器每隔一段时间检查一次.

    3. 合理的使用函数,函数中的局部变量函数执行结束后就会自动释放内存。
  4. ......更多内存管理的技巧会放在案例中演示,这里暂做了解。

全局函数

全局函数和属性可用于所有内建的 JavaScript 对象。全局函数又叫顶层函数或系统函数。

  1. parseInt() 函数可解析一个字符串,并返回一个整数。
  2. parseFloat() 函数可解析一个字符串,并返回一个浮点数。
  3. isNaN() 函数用于检查其参数是否是非数字值。
  4. String() 函数把对象的值转换为字符串。
  5. Number() 把对象的值转换为数字。
  6. eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    该方法只接受字符串作为参数,要计算的字符串中必须含有要计算的 JavaScript 表达式或要执行的语句。

  7. escape() 对字符串进行编码。
    • 返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
    • 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
  8. unescape() 对由 escape() 编码的字符串进行解码。
  9. encodeURI() 把字符串编码为 URI。

    URI :Uniform Resource Identifier,统一资源标识符;

  10. decodeURI() 解码某个编码的 URI。
  11. decodeURIComponent() 解码一个编码的 URI 组件。
  12. encodeURIComponent() 把字符串编码为 URI 组件。
  13. 三种编码方式的区别

    1. escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

      主要是为了防止特殊字符造成计算错误时候应用

    2. encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

      防止特殊字符串造成URI的传递错误,一般用于页面跳转的时候。

    3. encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

      防止URI参数中特殊字符串造成参数读取错误,一般用来传递参数。

  14. isFinite() 检查某个值是否为无穷大的数。

    如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

    • Infinity无穷大(系统定义常量)
    • -Infinity无穷小(系统定义常量)
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注