變數這個概念其實說簡單也簡單,說複雜也複雜。特別是再記憶體的角度來理解
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來表示變數的,但是對於上面的指令碼,我們的變數...