您好,登錄后才能下訂單哦!
這篇文章主要介紹es6作用域的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
作用域?
幾乎所有的編程語(yǔ)言的最基礎(chǔ)模型之一就是在變量中儲(chǔ)存值,并且取出修改這些的值的能力,事實(shí)上,在變量中存儲(chǔ)值和取出值的能力,給程序賦予了狀態(tài)。如果沒(méi)有這樣的概念,一個(gè)程序雖然可以執(zhí)行一些任務(wù),但是它們將會(huì)受到極大的限制而且不會(huì)非常有趣。但是這些變量該存儲(chǔ)在哪,又給如何讀?。繛榱送瓿蛇@個(gè)目標(biāo),需要制定一些規(guī)則,這個(gè)規(guī)則就是:作用域;
【相關(guān)課程推薦:JavaScript視頻教程】
作用域主要有哪幾種?
作用域主要分為全局作用域、函數(shù)作用域、動(dòng)態(tài)作用域、塊級(jí)作用域;
對(duì)象 類(lèi)型
window 全局作用域
fn 函數(shù)作用域
{} 塊級(jí)作用域
this 動(dòng)態(tài)作用域
作用域查找規(guī)則?
1、執(zhí)行環(huán)境有全局作用域和函數(shù)作用域之分;
2、每次進(jìn)入一個(gè)新的執(zhí)行環(huán)境,都會(huì)創(chuàng)建一個(gè)用于搜索變量和函數(shù)的作用域鏈;
3、函數(shù)的局部環(huán)境不僅可以訪問(wèn)函數(shù)作用域內(nèi)的變量,還可以訪問(wèn)包含起父級(jí)環(huán)境乃至全局環(huán)境;
4、全局環(huán)境只能訪問(wèn)全局聲明的變量和函數(shù),而不能直接訪問(wèn)局部環(huán)境重的任何數(shù)據(jù)。
全局作用域
變量在函數(shù)外定義,即為全局變量。
全局變量有全局作用域:網(wǎng)頁(yè)中所有腳本和函數(shù)均可使用。
如果變量在函數(shù)內(nèi)沒(méi)有聲明(沒(méi)有使用var關(guān)鍵字),該變量為全局變量。
//以下實(shí)例中carName在函數(shù)內(nèi),但是為全局變量。
//此處可調(diào)用carName變量
functionmyFunction(){
carName="Volvo";
//此處可調(diào)用carName變量
}
在函數(shù)內(nèi)部或代碼塊中沒(méi)有定義的變量上是作為window/global的屬性存在,沒(méi)有使用var定義的變量可以被delete的,而全局變量不可以。
函數(shù)作用域
函數(shù)內(nèi)部聲明的變量,稱(chēng)為函數(shù)作用域。函數(shù)內(nèi)部的變量外部無(wú)法
直接訪問(wèn),可以通過(guò)retun或者閉包的方式去訪問(wèn)。
//此處不能調(diào)用carName變量
functionmyFunction(){
letcarName="Volvo";
//函數(shù)內(nèi)可調(diào)用carName變量
}
<!--rerurn-->
functionmyFunction(){
letcarName="Volvo";
rerurncarName;
//函數(shù)內(nèi)可調(diào)用carName變量
}
letfn=myFunction()//Volvo;
<!--閉包-->
functionmyFunction(){
letcarName="Volvo";
functiongetName(){
console.log(carName)
}
returngetName();
//函數(shù)內(nèi)可調(diào)用carName變量
}
myFunction()//Volvo
塊級(jí)作用域
es6出現(xiàn)后,用let命令新增了塊級(jí)作用域,外層作用域無(wú)法獲取到內(nèi)層作用域,非常安全明了.即使外層和內(nèi)層都使用相同變量名,也都互不干擾。
關(guān)于暫時(shí)性死區(qū)
*在使用let命令聲明變量之前,該變量都是不可用的。如果去調(diào)用這種情況被稱(chēng)為暫時(shí)性死區(qū)。
let特性
*let不存在變量提升
*let不允許重復(fù)聲明
*擁有塊級(jí)作用域
*不可以使用window去調(diào)用
const特性
*定義常量
*不允許修改常量的值
*不允許先聲明后賦值
*同上
if(1){
leta=1
console.log(a)
}
動(dòng)態(tài)作用域
動(dòng)態(tài)作用域不關(guān)心函數(shù)和作用域是如何聲明以及在何處聲明的,只關(guān)心它們從何處調(diào)用。和this的機(jī)制就很像;
其實(shí)這里就有延伸出js的詞法作用域(靜態(tài)作用域),而與詞法作用域相對(duì)的是動(dòng)態(tài)作用域,函數(shù)的作用域是在函數(shù)調(diào)用的時(shí)候才決定的
letname='youzi';
functiongetName(){
letname="tuzi";
functiongetAge(){
console.log(name)
}
returngetAge();
}
getName()//tuzi
詞法作用域
JavaScript采用的是詞法作用域,函數(shù)的作用域在函數(shù)定義的時(shí)候就決定了。
<!--這段代碼執(zhí)行就是按照詞法作用域去執(zhí)行的。在函數(shù)定義時(shí)已經(jīng)被決定了-->
letname='youzi';
functiongetName(){
console.log(name)
}
functiongetAge(){
letname='tuzi';
getName()
}
getAge()//youzi
以上是“es6作用域的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。