章節連結
物件(Object)是 JavaScript 一個很神奇的存在。Function, Array, Object 在 JavaScript 裡頭都是以 by reference 的方式存在記憶體裡頭,跟以 by value 存放在記憶體的變數有一些區別。
課程對應章節
Course 30 ~Course 36 (全部一共有 85 Courses)
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。課程連結網址:http://tinyurl.com/w7vrql6
內容
1. 在 JavaScript 裡頭,函數是一個物件,且可以被呼叫(invocable),可包含 Primitive(基本型別) 的東西、Object、function 的 Code,並且可以有名稱或是匿名(Anonymous)。
2. 若你使用如 let a = function greet(d){……} 的方式建立函數,那麼只有變數的部分會被 Hoist。
3. Object 是 by reference 的方式被存取,跟一般的基本型態值(如字串、數字)並不相同。
4. 基本型態值是 immutable (不可改變的),若要改變其值,需先生成新的值後再代回原本的變數中儲存,而不是直接對其操作。 可以見 MDN 上的這篇文章:Primitive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/*Example*/ greet(); function greet() { console.log('hi'); // hi } anonymousGreet(); // cause error var anonymousGreet = function() { console.log('hi'); } anonymousGreet(); // hi // by reference let a = {name:'Hello'} let b = a a.name = 'Hi!' console.log(b) // {name:'Hi!'} // by value let a = 3 let b = a a = 2 console.log(b) // 3 // primitive - 1 let a = 'hello' a.toUpperCase() console.log(a) // 'hello' a = a.toUpperCase() console.log(a) // 'HELLO' // primitive - 2 let g = [] g.push('apple') console.log(g) // ['apple'] |