---
# System prepended metadata

title: 《code complete2》讀書會第一組討論筆記
tags: [Code Complete]

---

[TOC]

## 2024/02/25 - ch10 使用變數的一般事項
從網路上的91推薦文中決定讀書會章節順序

### 10.1資料認知
資料讀寫能力測試

資料類型有
- 原始
- 結構化
- 自定義
- 抽象
- 可變和不可變

### 10.2 變數與宣告
解讀"變數""宣告"的意義
- 是否可以不宣告型別
- 宣告型別
- JavaScript的隱式宣告與強型別程式語言的明示宣告的差異
- Jess: python屬於隱性宣告 效能問題 所以會需要先確認型別後再引用此變數
python 目前有套件可以輔助撰寫code上的變數型別

JavaScript的特性「隱性轉型」
Ash分享 [[ 技術筆記 ] JavaScript｜何謂強制轉型（coercion）以及如何作到轉換型別  ](https://medium.com/@sunnyhuang.sc/%E6%8A%80%E8%A1%93%E7%AD%86%E8%A8%98-javascript-%E4%BD%95%E8%AC%82%E5%BC%B7%E5%88%B6%E8%BD%89%E5%9E%8B-coercion-%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E4%BD%9C%E5%88%B0%E8%BD%89%E6%8F%9B%E5%9E%8B%E5%88%A5-d7e39e30083)

### 10.3 初始化
- 宣告變數與初始化的重要性
- 若不初始化的話會有什麼樣的影響
- 可以不賦值嗎?
- 測試在什麼樣的狀況下會產生錯誤
- 若沒初始化的話會抓到記憶體內潛存的值

### 10.4 作用範圍
- 作用範圍的概念認知
什麼是作用範圍
全域變數
區域變數

- [name=Charis]: 以冰箱保存物品舉例 區域作用域 與 全域作用域
物品是否會損壞等...生活舉例
- [name=Ash]: 可否在教室 呼叫 Dino 與在 校園操場 呼叫Ya Jess

在幾行程式碼中
「跨距」 有多常使用該變數 該變數就存活多久 
先宣告變數並賦值後 才在函式中應用 是否理想?
此書作者建議: 保持「有用」變數的使用範圍越小越好

- [name=Jess]: 資料庫處理 若一直開著連線的話會影響效能
python 有情境管理器 可輔助
使用資料庫時 使用全域變數
若只是單純的檔案的話

- [name=Ash] : 若使用全域變數中呼叫檔案的方式，可能會有的錯誤。

就近使用原則

避免變數被其他應用中汙染

### 10.5 持續性 【賦值的運作】
- 與作用範圍的差別
- 變數存活時間的差別
- 值在記憶體內的存留

函式使用完後 function內的變數就會消失，得用 關鍵詞 或 static 延續變數的使用
記憶體內存在的變數?!

### 10.6 綁定時間
- 在不同時期作宣告所產生的影響
- 對Code可讀性有所影響

- [name=Ash]: CPU 編碼方式 x86 與 AMD 不同用詞變數，兩者不可共用
根據該環境去使用其變數 靈活 

- [name=ya^2]: C++ 的虛擬函數 僅在使用時在解析特定函數
命名 變數 為動物
動物可以做什麼行為
綁定時間在編譯時就以定義要做什麼
僅在需要時才呼叫並執行


### 10.7 資料類型和控制結構之間的關係
兩者有明確的相互關係

循序資料轉譯成程式中的循序陳述式
僅賦於單一功能

### 10.8 為確切的一個目的使用每個變數


像是 閉包 與 IIFE 
Mackdown ˋˋˋ ˋˋˋ

作用域 
宣告時

- [name=Dino] : 分享
ˋˋˋ
for (var i = 0; i < 3; i++) {
    setTimeout(() => {
     console.log(i)
    }, 1000 * 1)
}

console.log(i); // 3 3 3
ˋˋˋ

- [name=Charis] : 過程詳情歡迎至Discord-Tech Book Community 語音頻道【讀書會】Room C. 聊天室 查閱
若有錯誤之處或需補充的地方請不吝提出 感謝~