欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript變量類(lèi)型以及變量作用域詳解

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

變量類(lèi)型

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

基本類(lèi)型

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

復(fù)制變量值

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

var num1 = 5;
var num2 = num1;

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

引用類(lèi)型

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

動(dòng)態(tài)屬性

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

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

復(fù)制變量值

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

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

這里寫(xiě)圖片描述

傳遞參數(shù)

ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù)。在向參數(shù)傳遞基本類(lèi)型的值時(shí),被傳遞的值會(huì)被復(fù)制給一個(gè)局部變量;在向參數(shù)傳遞引用類(lèi)型的值時(shí),會(huì)把這個(gè)值在內(nèi)存中的地址復(fù)制給一個(gè)局部變量,因此這個(gè)局部變量的變化會(huì)反映在函數(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)訪(fǎng)問(wèn)的其他數(shù)據(jù),決定了他們各自的行為。
全局執(zhí)行環(huán)境是最外圍的執(zhí)行環(huán)境,在WEB瀏覽器中,全局執(zhí)行環(huán)境被認(rèn)為是window對(duì)象,因此全局變量和屬性都是作為window的屬性和方法創(chuàng)建的。
每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境,當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí),函數(shù)的環(huán)境就會(huì)被推入一個(gè)環(huán)境棧中,在函數(shù)執(zhí)行之后,棧將其彈出,將控制權(quán)返回給之前的執(zhí)行環(huán)境。
當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈,作用域鏈的用途是保證對(duì)執(zhí)行環(huán)境有權(quán)訪(fǎng)問(wèn)的所有變量和函數(shù)的有序訪(fǎng)問(wèn)。作用域鏈的前端始終是當(dāng)前指行代碼所在的變量對(duì)象,作用域鏈中下一個(gè)變量對(duì)象來(lái)自外部環(huán)境,再下一個(gè)變量對(duì)象來(lái)自下一個(gè)外部環(huán)境,這樣一直延續(xù)到全局環(huán)境,全局執(zhí)行環(huán)境的變量對(duì)象始終是作用域鏈的最后一個(gè)對(duì)象。
標(biāo)識(shí)符解析是沿著作用域鏈一級(jí)一級(jí)地搜索標(biāo)識(shí)符的過(guò)程。搜索過(guò)程始終從作用域鏈的前端開(kāi)始,然后逐級(jí)地向后回溯,直到找到標(biāo)識(shí)符為止。

這里寫(xiě)圖片描述

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

無(wú)塊級(jí)作用域

JavaScript中沒(méi)有塊級(jí)作用域,例如:

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

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

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

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

相關(guān)文章

最新評(píng)論