當兩段程式碼使用同一個變數或函式名,但這個變數在同一個作用域 (例如全域),就會發生命名衝突,產生非預期的 bugs。
例如,如果你所有的迴圈都使用一個全域的 i
索引變數,然後發生在一個函式中的迴圈在另一個函式的迴圈迭代期間正在執行,共享的 i
變數就獲得了一個意外的值...
將變數/函式暴露在外,表示其他開發者也可以取用,無法限制別人會怎麼更改變數或函式,容易違背了預期的行為並導致 bugs。
例如,如果原本預設一個陣列全部都要是數值,但其他開發者在陣列加入了布林值和字串。燈楞 ! 非預期的行為就發生了,而且很容易不知道是哪邊導致的問題。
如果不必要地暴露變數/函式,它會促使其他開發者使用並依賴那些本來應該是私有的部分。或許不會立刻破壞程式碼,但它造成重構的風險,當我們之後想要重構時,就沒辦法輕易去變動,因為很可能因此把程式碼的其他部分弄壞。