溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

es6作用域的示例分析

發(fā)布時(shí)間:2022-03-23 13:38:21 來(lái)源:億速云 閱讀:177 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

es6
AI