---
# System prepended metadata

title: Untitled

---

1. 為什麼變數宣告在不同位置會有不同結果？
     因為最用域不一樣
2. for迴圈的{}是什麼意思？
    迴圈的作用域
4. javascript的變數怎麼宣告？
    var
    let
    const
6. var, let, const各有什麼不同？
    var
    宣告一個可隨意更改其內容的變數
    let
    宣告一個可隨意更改其內容的區塊區域變數
    const
    宣告一個只可讀取的不可變常數
    
    let 和 const 以「區塊」作為其作用域 (scope)，而 var 以「函        數」作為其作用域。
    
8. 什麼是hoisting？
宣告 var 的時候，不論變數的位置在哪，宣告會被「提前」至函式作用域的開頭，這個特性又稱為 hoisting

     ＊只有「宣告」這個動作有 hoisting (提升) 的特性，賦值 (把值指定給變數) 的動作不會 hoisting。
     範例：
```javascript=
function printName() {
      console.log(myName); //undefined 而非is not defined 
      var myName = "John";
      console.log(myName); // John
        }
        printName();
        
        
    //範例2:
    //全域作用域
    const calc = () => {
      //函式作用域
      console.log("執行calc函式", sum);
      return sum;
    };
    //hoisting 當變數在函式作用域中找不到，就會到上層作用域(全域作用域中找尋)
    console.log(calc());
    let sum = 1;
    
    
    範例3:
    for (var i = 0; i < 10; i++) {
        //0 1 2 3 .... 10
      setTimeout(() => console.log(i), 1000); //一秒之後印出i,setTimeout是個非同步函式
  /*
  由於setTimeout是非同步事件，js會先執行完同步事件後才執行非同步function
  用var宣告會出現全域污染
  1.先執行完for(.....) 
  2.setTimeout(....) 
  所以印出10個10
  */
}
```
