基本類型值有:undefined,NUll,Boolean,Number和String,這些類型分別在記憶體中佔有固定的大小空間,他們的值保存在堆疊空間,我們透過按值來存取的。
(1)值類型:數值、布林值、null、undefined。
(2)引用類型:物件、陣列、函數。
如果賦值的是引用型別的值,則必須在堆記憶體中為這個值分配空間。由於這種值的大小不固定(物件有很多屬性和方法),因此不能把他們保存到堆疊記憶體中。但記憶體位址大小是固定的,因此可以將記憶體位址保存在堆疊記憶體中。
<script type="text/javascript”> var box = new Object(); //创建一个引用类型 var box = "lee"; //基本类型值是字符串 box.age = 23; //基本类型值添加属性很怪异,因为只有对象才可以添加属性。 alert(box.age); //不是引用类型,无法输出; </script>
簡而言之,堆疊記憶體存放參考值,堆疊記憶體存放固定型別值。
<script type="text/javascript"> var man = new Object();//man指向了栈内存的空间地址 man.name = "Jack"; var man2 = man;//man2获得了man的指向地址 alert(man2.name);//两个都弹出Jack alert(man.name); </script>
複製變數值
再看下面這個例子:
<script type="text/javascript"> var man = new Object();//man指向了栈内存的空间地址 man.name = "Jack"; var man2 = man;//man2获得了man的指向地址 man2.name = "ming";//因为他们都指向同一个object,同一个name,不管修改谁,大家都修改了 alert(man2.name);//两个都弹出ming alert(man.name); </script>
由以上可以得到:在變數複製方面,基本類型和引用類型也有所不同,基本型別複製的是值本身,而引用型別複製的是位址。
傳遞參數
ECMAScript中,所有函數的參數都是按值傳遞的,
<script type="text/javascript"> function box(num){ //按值传递 num+=10; return num; } var num = 10; var result = box(num); alert(result); //如果是按引用传递,那么函数里的num会成为类似全局变量,把外面的number替换掉 alert(num); //也就是说,最后应该输出20(这里输出10) </script>
javascript沒有按引用傳遞的,如果存在引用傳遞的話,那麼函數內的變數將是全域變量,在外部也可以存取。但這明顯是不可能的。
執行環境
執行環境是javascript中最重要的概念之一,執行環境定義了變數或函數有權存取其他資料。
全域執行環境是最外圍的執行環境,在web瀏覽器中,全域執行環境是window對象,因此,所有的全域變數的函數都是作為window的屬性和方法創建的。
<script type="text/javascript"> var name = "Jack"; //定义全局变量 function setName(){ return "trigkit4"; } alert(window.name); //全局变量,最外围,属于window属性 alert(window.setName()); //全局函数,最外围,属于window方法 </script>
當執行環境內的程式碼執行完畢後,該環境被銷毀,保存其中的變數和函數也隨之銷毀,如果是全域環境,需所有程序執行完畢或網頁完畢後才會銷毀。
去掉var的局部變數
<script type="text/javascript"> var name = "Jack"; function setName(){ name = "trigkit4"; //去掉var变成了全局变量 } setName(); alert(name);//弹出trigkit4 </script>
透過傳參,也是局部變數
<script type="text/javascript"> var name = "Jack"; function setName(name){ //通过传参,也是局部变量 alert(name); } setName("trigkit4");//弹出trigkit4 alert(name);//弹出Jack </script>
函數體內還包含函數,只有這個函數才可以訪問內一層的函數
<script type="text/javascript"> var name = "Jack"; function setName(){ function setYear(){ //setYear()方法的作用域在setName()内 return 21; } } alert(setYear());//无法访问,出错 </script>
可以透過以下方法存取:
<script type="text/javascript"> var name = "Jack"; function setName(){ function setYear(){ //setYear()方法的作用域在setName()内 return 21; } return setYear(); } alert(setName()); //弹出21 </script>
以上是如何理解javascript中的類型、傳參與執行環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!