陳述式(Statement)/ 表達式(Expression) / 一級函數(First Class Functions)
表示式(Expression)
A unit of code that result un a value.
It doesn’t have to save to a variable.
表示式是程式碼的單位,會形成/回傳一個值,而這個值不一定要儲存在某個變數。
a = 3 //回傳31 + 2 //回傳3
- 陳述式:不回傳值、可hoist
- 表示式:回傳值、不可hoist
-陳述式
已於記憶體預留空間宣告為fngreet() //有hoistfunction greet(){
console.log(‘hi’) }
____-表示式
因為是var變數,未賦值前會被設定為undefinedanonymousGreet() // Undefined is not a function 不可hoistvar anonymousGreet = function(){
console.log(‘hi’) } //以下表達式會回傳一個函數物件(fn)anonymousGreet() //hi 此時的anonymousGreet已被賦值,可呼叫函數
- 函數:變數和函數已經存在於記憶體中,所以當程式被逐行執行時可以找到它們,函數已經全部在記憶體了,代表函數裡面的程式碼已經被執行了。
- 變數:JavaScript為a空出記憶體空間時,它不知道a會是什麼值,直到它被執行才知道。因此先放上undefined的替代文字,表示「我還不知道他的值」,如果我們都不設值的話也會得到一樣的替代文字
一級函數:可傳入別的地方可以很快被創造、使用, 把函數給另一個函數,就像使用變數一樣,引入一個全新的型態到程式語言中,稱為函數程式語言 (functional programming)
function log(a){
console.log(a) }log(function(){ console.log(‘hi’)}) //ƒ (){ console.log('hi')}
_____function log(a){
a() }log(function(){ console.log(‘hi’)}) //hilog參數可以帶入string, number, object..當然也可以帶入fn,因為fn就是物件