1. 程式人生 > >javascript變量、作用域和內存問題

javascript變量、作用域和內存問題

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變量、作用域和內存問題