原生js的let和var:作用域和作用域鏈,let聲明的全局變量不是window對象的屬性


原生js面試題:作用域和作用域鏈,let聲明的全局變量不是window對象的屬性

 

JavaScript從入門到精通
專欄收錄該內容
146 篇文章28 訂閱
訂閱專欄

這篇博文是我在心情不好的情況下寫的。

一、作用域
作用域,就是變量起作用的區域(范圍)。或者說,js代碼執行時,查找變量的范圍。

ES5及其以前:
JS的變量作用域分為:全局作用域和函數作用域(局部作用域)

 

 

在google的控制台里,可以看到

、用var 聲明的變量a1是全局變量,是window對象的屬性
、用var聲明的變量a2和a3,都是local的作用域

ES6開始有了let關鍵字后:
變量有了塊級作用域,所謂塊級作用域中的“塊”,表示用 一對花括號括起來的一塊代碼。

不管是全局作用域,還是函數作用域,其實都是塊級作用域,無非是大塊還是小塊的問題。

 

 

 

 

 

在google的控制台里,我們可以看到,有四個作用域(scope),分別是global(全局)、script(腳本)、local(局部)、block(塊級)。

Global作用域里的內容全是window對象的屬性。
Script里是v1;
Local(function f1)里是v2
Block里是v3

二、作用域鏈
作用域鏈是指:當js編譯器在尋找變量時,先在最近的作用域(花括號)里找,如果找不到,則抄上一級作用域(花括號)里找,依次類推,直到找到或者找不到為止。這就是作用域鏈。

 

 

三、Var定義的全局變量是window的屬性,但是let定義定義的全局變量不是window的屬性?

 

 

可以看到:

、用var聲明的a0,是window對象的屬性
、用let聲明的v1,屬於script的作用域
、用let聲明的v2,屬於local的作用域
、用let聲明的v3,屬於block作用域

————————————————
版權聲明:本文為CSDN博主「田江」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jiang7701037/article/details/101314293


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM