亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年08月14日 10:30:44   作者:粥要熬  
這篇文章主要為大家詳細介紹了JavaScript變量類型以及變量作用域的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

變量類型

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

基本類型

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

復(fù)制變量值

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

var num1 = 5;
var num2 = num1;

復(fù)制前的變量對象

這里寫圖片描述

復(fù)制后的變量對象

這里寫圖片描述

引用類型

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

動態(tài)屬性

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

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

復(fù)制變量值

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

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

這里寫圖片描述

傳遞參數(shù)

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

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

執(zhí)行環(huán)境及作用域

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

這里寫圖片描述

內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,但外部環(huán)境不能訪問內(nèi)部環(huán)境中的任何變量和函數(shù)。

無塊級作用域

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

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論