深入理解變數 作用域 記憶體

2021-08-07 11:34:25 字數 1167 閱讀 3709

變數這個概念其實說簡單也簡單,說複雜也複雜。特別是再記憶體的角度來理解

1)  我們暫且不管堆記憶體和棧記憶體是什麼?

我們把房間比作堆記憶體          

房間號比作棧記憶體

2)定義

引用型別是堆記憶體中物件

基本型別是棧記憶體簡單資料段

3)這句話如何理解?

4) **

var home=12;//這代表房間的門牌號是12

var home=new object();//這裡home是代表object這個物件(也就是引用型別的記憶體位址)的房間號

home.name="周行知";//通過這個房間的房間號,你可以找到這個房間主人是周行知(通過引用型別的記憶體位址來找到object這個物件本身)

alert(home.name);

假設我們用來給基本型別賦予屬性,你會發現是undefind如下:

var home=12;

home.name="周行知";

alert(home);

原因很簡單,home只有一塊記憶體,它無法向堆記憶體開闢記憶體空間,這就好像房間門牌是放房間號的棧記憶體,它不可能把我周行知放進去。

5)複製變數值的區別

基本型別複製變數值是值本身

例項1var box=12;

var box1=box;

alert(box1);//輸出12,這就好比廣告公司給酒店做門牌號,你這裡做門牌號是12,你在那裡做也是12,那麼廣告公司就直接用同一材料做。

alert(box);//輸出12

box1=13;

alert(box);//12

alert(box1);//13這就好比box1酒店要臨時改門牌號為13,但box酒店門牌號不變。

引用型別複製變數值是它的記憶體位址

var box=new object();

box.name="周行知";

var box2=box;

alert(box.name);//周行知

alert(box2.name);//周行知

box2.name="周星馳";

alert(box.name);//周星馳

alert(box2.name);//周星馳 box box2是object的記憶體位址指向記憶體中物件,通過記憶體位址找到記憶體物件,來改變物件的屬性,因而box.name也變了,

JS深入理解作用域 作用域鏈,變數提公升

1 作用域 1 全域性作用域 在瀏覽器載入我們html頁面的時候,首先會開闢乙個供js 執行的環境,即全域性作用域,這是乙個棧記憶體 2 私有作用域 函式執行時,開闢乙個新的棧記憶體,形成私有作用域 2 基本資料型別與引用資料型別區別?基本資料型別 string,number,boolean,nul...

深入理解JS中的變數作用域

變數的作用域有兩種 全域性變數和區域性變數。全域性變數最外層函式定義的變數擁有全域性作用域,即對任何內部函式來說,都是可以訪問的 var n 10 function f1 f1 輸出10,說明全域性變數n在函式內部被讀取區域性變數區域性變數 在函式內部宣告的變數。函式內部的變數,外部無法讀取。fun...

深入理解PHP原理之變數作用域

php變數的內部表示是如何和使用者指令碼中的變數聯絡起來的呢?也就是說,如果我在指令碼中寫下 var laruence echo var ze是如何把我的變數var和內部結構zval聯絡起來的呢?深入理解php原理之變數中講過,php內部都是使用zval來表示變數的,但是對於上面的指令碼,我們的變數...