javascript進階課程--第一章--函數

javascript進階課程--第一章--函數

 

 

學習要點

  • 瞭解內存管理
  • 掌握全局函數的使用

 

 

知識點

基本類型和引用類型

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

    這些類型分別在內存中佔有固定的大小空間,例如:數值型在內存中佔有八個字節,布爾值只佔有一個字節......
    他們的值保存在棧空間,咱們經過按值來訪問的。javascript

  2. 引用類型:對象、數組、函數

    引用類型內存中佔有的空間不固定,可是內存地址大小是固定的,所以存儲的其實是數據的內存地址html

  3. 在變量複製時候,基本類型複製的是值自己,而引用類型複製的是地址.

    基本類型複製
    java

    引用類型複製
    web

  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>
相關文章
相關標籤/搜索