国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript變量類型以及變量作用域詳解

2019-11-19 15:48:59
字體:
來源:轉載
供稿:網友

變量類型

ECMAScript變量可能包含兩種不同類型的數據值:基本類型和引用類型。

基本類型

基本類型指的是簡單的數據段,5種基本數據類型:undefined、null、boolean、number、string,基本數據類型是按值訪問的,因此可以操作保存在變量中的實際的值。

復制變量值

從一個變量向另一個變量復制基本類型的值,會在變量對象上創建一個新值,然后把該值復制到為新變量分配的位置上。例如:

var num1 = 5;var num2 = num1;

復制前的變量對象

這里寫圖片描述

復制后的變量對象

這里寫圖片描述

引用類型

引用類型指那些可能由多個值構成的對象,引用類型的值是保存在內存中的對象,JavaScript不允許直接訪問內存中的位置,在操作對象時,實際上是在操作對象的引用而不是實際的對象,因此,引用類型的值是按引用訪問的。

動態屬性

引用類型的值,我們可以為其添加屬性和方法,也可以改變和刪除其屬性和方法。如果對象不被銷毀或者這個屬性不被刪除,則這個屬性將一直存在,但是我們不能給基本類型的值添加屬性。例如:

var person = new Object();person.say = "hello";alert(person.say); //"hello"

復制變量值

從一個變量向另一個變量復制引用類型的值時,也會將存儲在變量對象中的值復制一份放到為新變量分配的空間中,這個值的副本實際上是一個指針,而這個指針指向存儲在堆中的一個對象。復制結束后,兩個變量實際上將引用同一個對象,改變其中一個變量,就會影響另一個變量。例如:

var obj1 = new Object();var obj2 = obj1;obj1.say = "hello";alert(obj2.say); //"hello"

這里寫圖片描述

傳遞參數

ECMAScript中所有函數的參數都是按值傳遞的,把函數外部的值復制給函數內部的參數。在向參數傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量;在向參數傳遞引用類型的值時,會把這個值在內存中的地址復制給一個局部變量,因此這個局部變量的變化會反映在函數的外部。例如:

function addTen(num) { num += 10; return num;}var count = 20;var result = addTen(count);alert(count);  //20 alert(result);  //30

執行環境及作用域

執行環境定義了變量或函數有權訪問的其他數據,決定了他們各自的行為。
全局執行環境是最外圍的執行環境,在WEB瀏覽器中,全局執行環境被認為是window對象,因此全局變量和屬性都是作為window的屬性和方法創建的。
每個函數都有自己的執行環境,當執行流進入一個函數時,函數的環境就會被推入一個環境棧中,在函數執行之后,棧將其彈出,將控制權返回給之前的執行環境。
當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈,作用域鏈的用途是保證對執行環境有權訪問的所有變量和函數的有序訪問。作用域鏈的前端始終是當前指行代碼所在的變量對象,作用域鏈中下一個變量對象來自外部環境,再下一個變量對象來自下一個外部環境,這樣一直延續到全局環境,全局執行環境的變量對象始終是作用域鏈的最后一個對象。
標識符解析是沿著作用域鏈一級一級地搜索標識符的過程。搜索過程始終從作用域鏈的前端開始,然后逐級地向后回溯,直到找到標識符為止。

這里寫圖片描述

內部環境可以通過作用域鏈訪問所有的外部環境,但外部環境不能訪問內部環境中的任何變量和函數。

無塊級作用域

JavaScript中沒有塊級作用域,例如:

if(true){ var color = "blue";}alert(color);  //"blue"

在函數中未使用var聲明的變量會被成全局變量,例如:

function add(num1,num2){ sum = num1 + num2; return sum;}var result = add(10,20);alert(sum);  //30

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 京山县| 繁峙县| 河曲县| 宽甸| 潜江市| 株洲县| 礼泉县| 乾安县| 长春市| 宝清县| 岫岩| 盖州市| 清徐县| 尚志市| 浮梁县| 讷河市| 西乌珠穆沁旗| 玉山县| 鄄城县| 昭通市| 红桥区| 陆丰市| 固镇县| 南涧| 松溪县| 青海省| 鸡东县| 怀仁县| 合水县| 宜城市| 嵊州市| 青海省| 喀喇沁旗| 积石山| 连江县| 洛宁县| 墨江| 彩票| 金沙县| 郯城县| 三明市|