var rdp = rdp = {} 中的兩個 `=` **不是聲明賦值兩次**,而是鏈式賦值表達式,等價於:
var rdp = {}, rdp2 = {}; // 兩個不同變數同時初始化為空物件
但因為左右變數名**完全相同**(都是 `rdp`),第二個賦值覆蓋第一個,**毫無意義**,純屬多餘代碼。
var a = b = c = {}; // 從右向左結合
// 步驟:
// 1. 創建物件 {}
// 2. c = {} (若 c 未聲明,嚴格模式拋錯,非嚴格模式創建全域變數)
// 3. b = c 的結果 (即 {})
// 4. a = b 的結果 (即 {})
// 5. var a 宣告區域變數 a
// 推薦:單 var 多宣告,清晰無歧義
var objA = {}, objB = {};
// 或 ES6 解構賦值
const [objA, objB] = [{}, {}];
看到 `var x = x = ...` 直接刪掉後面的 `x =`,保留 `var x = ...` 即可。代碼潔癖從拒絕無意義鏈式賦值開始。