JavaScript 核心篇 學習筆記: Chap.17 — 陳述式與表達式
可以參考MDN裡面對statement及expression的詳細說明及舉例:
函式陳述式 vs. 函式表達式
// 函式陳述式、具名函式 (Function Declaration)
function callName() {
// do something
}// 函式表達式、匿名函式 (Function Expressions, Anonymous Function)
var callName = function() {
// do something
}
前面在介紹Hoisting時有舉過例子,這兩者的Hoisting結果大不相同。
Block結構可以內含Statement,或是Expression作為物件實字 (Object Literal)。
物件實字是JS定義物件的其中一個方法。
{
ming: ‘小明’
}
因為在這個例子裡,block裡面的是expression,所以他可以被賦值給變數:
var a = {
ming: ‘小明’
}
但如果block裡面寫的是statement呢:
{
var ming = ‘小明’
}
如果把這段block賦值給另一個變數,則會出現錯誤:
若用es6的const或let宣告變數,則該變數的作用域僅會在他所屬的block內。
前面講作用域時提到過,變數的作用域是在function內。但如果用es6的const或let宣告變數,則它的作用域會限縮到該block內,我們來看看以下範例:
這是被包在一個block裡的全域變數 myVar,console.log會如期的印出hello。
<script>
{
var myVar = ‘hello’;
}
console.log(myVar);
</script>
但如果把var關鍵字改成const,myVar就成了一個not defined的變數了。
<script>
{
const myVar = ‘hello’;
}
console.log(myVar);
</script>