zoukankan      html  css  js  c++  java
  • javascript进阶课程--第一章--函数

    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无穷小(系统定义常量)

    代码

     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>
  • 相关阅读:
    gcc数据对齐之: howto 2.
    gcc数据对齐之: howto 1.
    gcc数据结构对齐之:why.
    linux tricks 之 BUILD_BUG_ON_ZERO.
    linux tricks 之 FIELD_SIZEOF.
    linux tricks 之 container_of.
    linux tricks 之 bitmap分析.
    linux tricks 之 roundup.
    Windows之svn问题
    Embeded linux之地址映射
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8896463.html
Copyright © 2011-2022 走看看