JavaScript小知識:let和var的作用域

2021-01-07 JSindexhtml

在ECMAScript6中又新增了兩個變量聲明關鍵字:let和const。那麼這個

有什麼不同?

var只有全局作用域和函數作用域,所謂全局作用域就是在代碼的任何位置都能訪問var聲明的變量,而函數作用域在變量聲明的當前函數內部訪問變量。函數外部是無法訪問函數內部聲明的變量的

var messageOne="hello word !";

function message(){

var messageTwo="你好,世界!";

①console.log(messageTwo);

②console.log(messageOne);

}

③console.log(messageTwo);//Uncaught ReferenceError: messageTwo is not defined

④console.log(messageOne);

message();

運行代碼,我們只③出現語法錯誤:messageTwo is not defined,這是因為③是我們在函數內部用var聲明的變量,屬於函數局部變量,函數外部是不能訪問這個變量的.

let是塊作用域,所謂塊作用就是控制流程語句的有效範圍。如果我們控制流程語句中使用let定義一個變量,那麼我們在控制流程語句外是無法訪問這個變量的。

for (let i = 0; i < 3; i++) {

let messageOne= "你好,世界!";

①console.log(messageOne);//你好,世界!

}

②console.log(messageOne);//messageTwo is not defined

②代碼報錯,是因為messageOnes是let聲明的局部變量,在控制流程語句for的外部無法訪問該變量。

相關焦點

  • 我的JavaScript的學習筆記:let、var 和const的作用域
    ECMAScript 6(簡稱ES6)引入了兩個新的變量聲明關鍵字:let和const。那麼新增的let和const與var有什麼區別?我們知道var只有全局作用域和函數作用域,全局作用域就是指在在全局環境中聲明的能在代碼的任何位置訪問的變量。函數作用域是指在在函數內部聲明的只能在這個函數內部訪問的變量。var a="hello word !"
  • JavaScript let 與var 區別及var弊端
    let,const來源 ES2015 引入了兩個重要的 JavaScript 新關鍵詞:let 和 const。 這兩個關鍵字在 JavaScript 中提供了塊作用域(Block Scope)變量(和常量)。
  • var和let聲明變量時的一些區別
    var和let聲明變量時的一些區別1.如果在全局作用域中用var聲明變量,此變量會默認成為window的一個屬性,let聲明的變量則不會添加到window對象中。2.在es6之前,是沒有塊級作用域,所謂塊級作用域,就是用{}包含的區域,我們常用的有for,while,if等。但是在塊級作用域中用let聲明變量,那麼此變量就有了塊級作用域,就必須只有在此塊級作用域才能訪問此變量。3.var聲明的變量有變量提升特性,let聲明則沒有這個特性。
  • JavaScript中var、let和const的使用
    小編在面試前端崗位的時候經常會發現面試官經常喜歡提問關於聲明變量的問題。那麼,JavaScript中var、let和const究竟有什麼樣的區別呢?首先,我們先簡單地從var和let說起。var是函數作用域,let是塊級作用域function add(){ for(var i = 0,i<5,i++){  console.log(i) }    console.log("value = " + i)}用i結果為 5 因為for內部循環到4,外部再此訪問變量x時,因為var聲明的x是全局變量,通過變量提升到了
  • JavaScript 的 var,let 和 const 總結
    // 每日前端夜話 第399篇// 正文共:1300 字// 預計閱讀時間:6 分鐘當你需要對 var,let 和 const 進行複習時,希望對你有用。varvar 語句用來在 JavaScript 中聲明一個變量,該變量遵守以下規則:它會在 window 上以相同的名稱創建一個全局屬性。函數作用域和全局作用域當出現在全局作用域內時,var 創建一個全局變量。
  • JavaScript let 和 const 關鍵字介紹 | JavaScript 教程
    JavaScript 塊級作用域(Block Scope)使用 var 關鍵字聲明的變量不具備塊級作用域的特性,它在 {} 外依然能被訪問到。{ var x = 2; }// 這裡可以使用 x 變量在 ES6 之前,是沒有塊級作用域的概念的。ES6 可以使用 let 關鍵字來實現塊級作用域。
  • JavaScript小知識:for 循環中的 let 聲明
    在let出現之前,我們在for循環中是用var定義的迭代器變量會溢出循環體:for(var i=0;i<5;i++){//循環內容}console.log(i);//5當使用let聲明時,這個問題就不存在了,因為let聲明的迭代器變量作用域僅限於for循環體。
  • 思維導圖 | 全面分析let和var的區別
    const2 / let VS var(1)區別1:var 存在變量提升,而let不存在(2)區別2:全局執行上下文的映射機制① let VS var② 全局執行上下文中:不寫var③ 函數中:不寫var(3)區別3:重複聲明(4)區別4:暫時性死區與typeof (5)區別5:塊級作用域① 上下文&作用域② let 的閉包3 / 小結:let和var的區別
  • 卓象科技:ES6中let,const和 var 三者的區別
    2) let聲明的變量,存在塊級作用域let聲明的變量只在所在聲明的代碼塊有效。塊級作用域由{}包括,if語句和for語句裡面的{}也屬於塊級作用域3) let不允許在同一作用域裡進行重複聲明同一個變量在同一個作用域裡,如果使用var進行聲明變量,後面會覆蓋前面的 。
  • js面試題:let const var的區別
    let const var三者的區別。這個也是一個比較初級的問題,答不出來基本上百分之百就掛了哈!es5時候只有var定義變量,只有全局作用域和函數作用域。es6新增 let和const,存在塊級作用域let:塊級作用域var:全局作用域const:常常定義常量 也是塊級作用域let const定義變量不存在變量提成,var存在聲明提前。let 和const定義變量必須先定義再使用,否則會報錯。
  • Js變量:var,let,const三個關鍵字的區別
    var在ECMAScript的所有版本中都可以使用,而const和let只能在ES6及更晚的版本中使用。var,let,const三個關鍵字的區別var:1)聲明作用域:在函數內部,使用var定義一個變量(局部變量),在函數被調用完之後,該變量會被立即銷毀。
  • JavaScript函數 - 作用域
    主要是因為所有的函數聲明都有一個作用域的概念 所謂作用域,就是起作用的範圍,或者說是有效範圍。我們每一個函數的聲明都會形成一個作用域。3.執行第三個alert,由於sum(); 函數執行結束,已經輸出結果了,sum整個函數被銷毀,所以最後一個alert仍然是返回最上面定義的var a=10 第一個例子中 由於函數體內沒有var定義a,所以a是全局變量,調用函數後沒有執行,所以下面的alert會返回函數體內的語句結果。
  • 學習筆記:JS中的作用域和預解析
    知識總結:謝靜賢、湯昊 在javascript中作用域是非常重要的,本文將會說明作用域以及我們在工作,以及面試中的一些面試題,如果有不足的地方希望大家可以評論指出來,自己一定會及時的改正錯誤,避免大家走入一些誤區。
  • JS面試題與Javascript詞法作用域說明
    正確的答案應該是:undefined和dd 為什麼第一次alert的結果是undefined呢?要解釋得清楚明白需要用到Javascript的詞法作用域。Javascript中的函數「在定義它們的作用域裡運行,而不是在執行它們的作用域裡運行」,這是權威指南裡抽象而精闢的總結。 Javascript的邏輯默認在一個全局作用域中執行,如以上程序段中的「var tt='aa';」就是定義一個全局作用域的全局變量(如果以上代碼段不是摘自某個函數鏈的話)。
  • 想成為JS大牛,作用域是你必須知道的
    在JS裡,使用的作用域就是詞法作用域。簡單地說,詞法作用域就是定義在詞法階段的作用域。換句話說,詞法作用域是由你在寫代碼時將變量和塊作用域寫在哪裡來決定的,因此當詞法分析器處理代碼時會保持作用域不變(大部分情況下是這樣的)。
  • JavaScript6 新語法 let 有什麼優勢?
    最近看國外的前端代碼時,發現ES6的新特性已經相當普及,尤其是 let,應用非常普遍雖然 let 的用法與 var 相同,但不管是語法語義上,還是性能上,都提升了很多,下面就從這兩方面對比一下
  • 12 個 GitHub 上超火的 JavaScript 奇技淫巧項目,找到寫 JavaScript 的靈感!
    目錄調用堆棧原始類型值類型和引用類型隱式, 顯式, 名義和鴨子類型== 與 ===, typeof 與 instanceofthis, call, apply 和 bind函數作用域, 塊級作用域和詞法作用域閉包map
  • JavaScript
    2.1997 年,ECMA (歐洲計算機製造商協會),制定出客戶端腳本語言的標準:ECMAScript,統一了所有客戶端腳本語言的編碼方式 javascript組成: 1、ECMAscript javascript的語法(變量、函數、循環語句等語法) 2、DOM 文檔對象模型 操作html和css的方法 3、BOM 瀏覽器對象模型 操作瀏覽器的一些方法
  • Javascript迎來大更新,新語法let有哪些優勢?
    雖然 let 的用法與 var 相同,但不管是語法語義上,還是性能上,都提升了很多,下面就從這兩方面對比一下語法>>for(var i=0; i<2; i++){console.log('outer i: ' + i);for(var i=0; i<2; i++){
  • 不要再在JavaScript中用『var』聲明變量了
    全文共2218字,預計學習時長7分鐘對`const` 和`let`的介紹大家都始於初學者。我學到在JavaScript中用關鍵詞var來聲明變量,這是一個簡單且有效的方法,但如今我已做出改變。若你還在編寫類似var x = 5的代碼,那你需要停下來。說實話,你不必停止,但應該如此。人們常常將程式語言視作視為一系列金科玉律。但事實上程式語言就像任何一個口頭語言一樣,是不斷變化發展的。現在我用關鍵詞const和let在JavaScript中聲明所有變量,你也應該這麼做。