
今天想來看個基礎到不行,但之前一直沒有好好認識的 JavaScript 常識,也就是 JavaScript 的模組系統 - CommonJS 和 ES Module。
什麼是 JavaScript 的模組系統?所謂的「JavaScript 模組系統」是指能將程式碼拆分為獨立、可重複使用之模組(module)的機制。透過模組系統,不同檔案之間可以用標準化的方式進行匯入與匯出,使專案在規模變大時仍然可以保持清晰的結構、良好的維護性與重複使用性。JavaScript 的模組系統也就是大家都有聽過的 CommonJS 和 ES Module。
JavaScript 模組系統的歷史背景接下來讓我們快速來看一下關於 JavaScript 模組系統的歷史。在 JavaScript 被創造出來的早期,它的用途主要是替網頁加入一些簡單的互動效果,例如按鈕點擊事件或表單驗證。當時的網頁互動仍以整頁重新載入為主,JavaScript 的功能範圍很小,也沒有跨檔案共享邏輯的需求,因此語言本身並沒有內建「模組」的概念。
文科少女寫程式 發表在 痞客邦 留言(0) 人氣(0)
很久之前有看了Map這個物件,今天來看看跟Map一樣,也是一個很特別的物件,也就是Set。這種物件也是平常比較少會碰到,但學起來,在某些時刻也會有幫助的物件。今天就來好好認識一下Set的吧!Set是什麼?從MDN的說明內容可以理解到Set是一個object,可以儲存任何型別的唯一值,不論是原始型別或是物件。文科少女寫程式 發表在 痞客邦 留言(1) 人氣(48)
mutable和immutable是一個很重要的觀念,而且mutable和immutable其實和JavaScript的基本型別和物件型別的傳值(by value)、傳址(by reference)特型有很大的關聯,我們這就從傳值和傳址的部分開始看吧!基本型別的傳值特性所謂傳值(by value)?「傳值by value」白話一點來說的話,就的是「以值為基準,而不是以址為基準,每個值都是獨立的,就算值看起來是相等的,但所佔的記憶體位置都不同」。
可能單單這樣的一句話,還是很難理解,接下來透過一些實際的情境來理解吧!實際的程式碼情境
這一段程式碼,做了幾個動作,以行為單位分別是「宣告變數」、「用既有變數來宣告新的變數(將既有變數值賦予新變數)」、「對變數重新賦值」。
宣告變數
var a = 1;
在宣告變數時,一開始會先將變數指向undefined,再進行賦值的動作。JavaScript會留一個記憶體空間給這個值,在這個情境中,以圖呈現的話,會是以下這個樣子。
(1) 一開始會先指向undefined(如果是用let或const宣告的話,這一步的狀況會有點不同,這部分可以參考之前在學習hoisting特性的筆記文)。

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(19)
JavaScript的hoisting這個特性在初學時期可能會偶爾不小心碰到,但不太會有什麼深刻的感受,或是不知道原來這就是hoisting。但是近期參與重構主題的讀書會,有討論到一些寫法和hoisting這個特性有關,才發現其實這個特性其實真的很需要好好認識,加上前陣子因為一些面談的過程,發現自己其實對這個概念有些錯誤的理解,所以就想說來好好地再幫自己釐清和整理一些這部分的必懂常識囉!什麼是hoisting首先,不免俗地要來說文解字一下!直接看字面的話,沒有什麼花俏的說明,hoisting的字面意思就是「提升」。再深入一點理解,就會是「提升」某些東西,某些東西被「提升」了。看起來好像很廢話,總之就是「提升」。
進到MDN看一下更詳細的說明吧!

從上述這段說明可以看到關於「提升」的關鍵句子,也就是"move the declaration of functions, variables or classes to the top of their scope",大致上的意思就是是「函式、變數的宣告會被提升到作用域頂部」。如何產生hoisting雖然前面的那句話已經解釋了何謂hoisting,但是老實說如果還沒有深刻透過實作來理解的話,可能還是很難單單透過這句的說明就掌握到什麼是hoisting。在進一步看宣告會被hoisting的對象之前,先來從另一個角度了解hoisting是如何產生的吧!
這部分要回到最根本去理解JavaScript建立執行環境的過程,JavaScript在建立執行環境(Execution context)時,主要會分為兩個階段:創建階段(Creation Phase)、執行階段(Execute Phase)
第一個階段、創造階段
在這個階段主要會做以下幾件事情:
- 在記憶體中幫變數、函式建立一個空間,這就是和這次提到的hoisting有關的部分。
- 將全域物件(Global Object)、this設定到記憶體中
- 建立外部環境(Outer Environment)
第二階段、執行階段
在這個階段會逐行執行程式碼,並編譯成電腦懂的內容,如果在執行程式碼的時候,找不到當下程式碼中要使用的變數,就會往一層一層往外找。 文科少女寫程式 發表在 痞客邦 留言(0) 人氣(46)
map這個陣列的操作方式,只要從超級新手升級到初階新手,基本上都知道。但是說到Map這個東東,可能就有些人本來沒看過了。沒錯!!就是我!!!這邊說的就是我!!!!學藝不精的我本來沒看QQ不過本來沒看過沒關係,現在看過了,那就花點時間把他是什麼給搞懂吧!Map是什麼?
文科少女寫程式 發表在 痞客邦 留言(0) 人氣(32)
之前偶爾會在公司的專案碰到前人用Rx.js寫的內容,但是天資愚鈍的我幾次自己嘗試去理解Rx.js的概念,都好像通了,又好像沒通。直到前陣子讀書會上,Ken大大分享觀察者模式(Observer Pattern),這個Rx.js主要運用到的設計模式,才感覺自己應該有比較通了,所以想說這次就試著從上次讀書會中學習到的內容,延伸做一個Rx.js基本概念的學習筆記。觀察者模式(Observer Pattern)是什麼?如果去查相關資料的話,可能會查到類似的說明「observer訂閱observable後,當事件發生,observable就會去通知訂閱這個observable的observer。」
(這不是在繞口令,但看起來很像在繞口令)
雖然這句話,看起來不太難懂,但是對於當初第一次碰到這個pattern的我來說,observer(觀察者)和obervable(可觀察者)這兩個詞其實很抽象。等比較理解了之後,才發現其實沒那麼難。文科少女寫程式 發表在 痞客邦 留言(0) 人氣(93)
又來補強自己的基本觀念了!!沒錯~小女不才,已經入行10個月,這個基本觀念還是沒有確實地建立起來。最近踩了一個大雷,不來好好學習不行了,所以就以這個主題來寫學習筆記了!
好啦!廢話不多說,直接進入正題啦!物件型別的特性-傳址(by reference)物件型別是傳址不是傳值,所以跟其他字串、數字不太一樣,在進行複製動作時,並沒有那麼單純。
物件型別因為是傳址,所以其實可以把物件型別用另一種方式去看,就是當宣告一個陣列變數或物件變數時,除了變數的內容,還隱藏著一個東西就是變數內容儲存的位址,也就是物件型別儲存的位址。這部分尤其在進行複製動作的時候,會有更明顯的感受,因為在進行複製時,由於傳址特性,雖然表面上把值複製出來賦值成另一個變數了,但實際上物件型別儲存的位址還是指向同一個,所以這個物件或陣列其實是一樣的東西,直接看一下小小的範例!

文科少女寫程式 發表在 痞客邦 留言(1) 人氣(170)
在這段期間,不管學習上的一些作業,或是做自己想做的一些作品,
少女我發現很常會需要運用陣列的處理方式讓自己拿到自己需要的資料。
但是少女我其實自己並不算太擅長用陣列的方法,除了常用的幾個方法外。
不過在經歷幾週的上班後,我發現針對這部分,自己還有一些雖然自己知道怎麼用,
但實際上卻沒有真正了解到該在什麼時機用這些陣列方法,
這次的學習筆記的重點就會以這部分為主。使用陣列方法的各種情境想要回傳新陣列時filter()
我覺得這個方法看名字就可以馬上知道它的用途,簡單來說就是篩選(廢話)。
功能就跟在逛網拍時,篩選特定項目一樣,最後只會顯示符合篩選條件的商品項目(回傳新陣列),
但是不符合條件的項目依舊還在(不影響原陣列)。
直接看範例!
範例一:篩選出大於100的數字

結果:
只有大於100的數字會存在於新的陣列中。

文科少女寫程式 發表在 痞客邦 留言(0) 人氣(249)