2017-01-11 58 views
0

我正在閱讀一些書籍,學習javascript,並且我看到javascript使用詞法範圍。在javascript中遇到麻煩了解詞彙範圍

詞彙範圍是指任何變量的範圍,可以定義 從函數(而不是當你調用它)在 功能在範圍

我嘗試了一些基本的例子:

function f() { 
    console.log(x); 
} 
const x = 10; 
f(); // 10 

那麼這是如何工作,爲什麼它記錄值10?當我定義函數時,變量x不存在。我是javascript noob,所以也許我在這裏錯過了一些東西。提前致謝。

+0

檢查[此視頻(https://www.youtube.com/watch?v=ByG-RU5fCcQ&t=52s)

發表: 50。它很好地描述了詞法範圍。我發現它很有幫助。 –

回答

0

這是由於一個名爲吊裝的概念。 實質上,任何聲明都被移動到範圍的頂部,因此總是可以在範圍內的任何地方訪問。

在您的函數id被定義的時候,一個詞法作用域捕獲對x的引用。其中X是在6個分配10.

Read more about hoisting in JS here. (JavaScriptisSexy.com) More specifically about Hoisting and const here.

+0

這裏的提升並不重要(無論如何,這個賦值並不是在函數聲明的上面)。賦值運算符的使用從不會被掛起。 'const'關鍵字(不像'var')也沒有被提升。 – Quentin

+0

但是,參考是。 –

+0

重新編輯:編號'const'語句不會被掛起。 [This](http://jsbin.com/cogubon/1/edit?js,console)拋出一個引用錯誤,因爲'const'沒有被掛起。 [This](http://jsbin.com/cogubon/2/edit?js,console)會拋出一個語法錯誤,因爲如果不給它賦值(或稍後爲其賦值),則不能有常量。 – Quentin