2017-01-02 40 views
2

我期待到let塊範圍的JavaScript中的工作,特別是瀏覽器的調試視圖是如何顯示的信息的JavaScript讓塊範圍在Firefox開發者工具調試視圖

內使用let一個for環路創建塊範圍,該回調function timeoutHandler()具有訪問,所有好與此

Chrome開發工具下,[[作用域]]如下所示:

enter image description here

Firefox的開發者工具,沒有列出一個額外的範圍座,其中有timeoutHandler:timeoutHandler(),因爲它的屬性。我只希望看到的區塊範圍與j:1

enter image description here

這是什麼額外的座指什麼?

只是想知道,如Chrome瀏覽器的調試顯示詞彙範圍我預期,但預期不會在Firefox調試

+0

我絕不js中的專家,但正如我所看到的那樣,它是'let j'被定義的塊 - 這將是'{...}塊' – birdspider

+0

@birdspider yes,但在Firefox視圖中有2個塊。這是另一個關於 – Ryan

+0

hm的問題,唯一想到的是JS文件/代碼片段獲取它自己的總括區塊(最上面/根塊?) - 哪個FF顯示 - 但我沒有找到任何難以理解的事實/標準 - 我檢查了[這裏](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-lexical-environments),但很快就迷路了 – birdspider

回答

0

什麼是timeoutHandler提到這個額外的模塊?

它似乎顯示immutable binding that is wrapped around your named function expression。該函數表達式實際上是解釋爲,如果你的代碼是

'use strict'; 

for (var i = 1; i <= 2; i++) { 
    let j = i; 
    setTimeout({ 
     const timeoutHandler = function() { 
      console.log(j); 
      debugger; 
     }; 
     timeoutHandler 
    }, 1000); 
} 

(OK,呼叫表達這裏面塊範圍顯然不是語法有效,但我希望你的意思)

相關問題