javascript變量、作用域和內存問題
阿新 • • 發佈:2017-06-11
regexp 技術分享 存在 ring 作用域鏈 字符串 影響 指向 bool
一.基本類型(傳值後兩者不互相影響)
5種:Undefined、Boolean、Null、Number、String
基本類型的賦值是傳遞該值得副本。兩者可以參與任何操作而不受影響。
二.引用類型(傳值後兩者會互相影響)
指可由多個值構成的對象
變量為引用類型的變量,其存儲的是指向存在內存(堆)中的引用類型的指針的值
傳值為傳指針的值的副本,最終兩者指向的是內存中同一個位置,兩者會互相影響。
三.傳遞參數
1.傳遞的參數為基本類型:
被傳遞的值會被復制給一個局部變量。(參數屬於arguments對象中的一個元素)
2.傳遞的參數為引用類型:
會把這個值在內存中的地址復制給一個局部變量,因此局部變量的變化會反映在函數外部。
function addTen(num){ num += 10; return num; } var count = 10; var result = addTen(count);//傳基本類型,為傳副本,兩者互不影響 console.log(count);//10 console.log(result);//20
四.檢測類型
1.typeof操作符是確定一個變量是字符串、數值、布爾值、還是undefined的最佳工具(確定基本類型的種類)
2.instanceof是確定引用類型是Object、Array、RegExp的最佳工具
五.執行環境及作用域
內部環境可以通過作用域鏈訪問所有的外部環境,但是外部環境不能訪問內部環境中的任何變量和函數。每個環境可以向上搜索作用域鏈,以查詢變量和函數名。
javascript變量、作用域和內存問題