JavaScript 核心篇 學習筆記: Chap.17 — 陳述式與表達式

陳述式(Statement)與表達式(Expression)最大的差別在:陳述式不會回傳結果。

Yi-Ning
3 min readNov 25, 2019

可以參考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>

--

--