剛開始學習 JavaScript 時候,一定會大量使用 Global Variables。但是使用 Global Variables 的同時,請務必使用 var
宣告,而不是直接使用阿,否則會常常遇到 ReferenceError
的錯誤。
function addToBlockList (item) { block_List.push(item); } addToBlockList ("add 127.0.0.1");
執行後你可以發現 console 噴出 Uncaught ReferenceError: block_List is not defined
,加上一個判斷試試看。程式碼改成底下
function addToBlockList (item) { if (block_list) { block_List.push(item); } } addToBlockList ("add 127.0.0.1");
會噴出一樣的錯誤訊息,原因也是 block_List is not defined
,最後將程式碼換成底下
function addToBlockList (item) { if (window.block_list) { window.block_List.push(item); } } addToBlockList ("add 127.0.0.1");
就可以正常跑了,也不會出現任何錯誤訊息,建議大家不要寫這樣的程式碼,能夠少用 window.xxxx 這種全域變數就盡量少用,不要任意宣告或修改 window 全域變數,上面程式碼可以換成底下會更好
(function() { var block_list = []; var addToBlockList = function (item) { if (block_list) { block_list.push(item); } }; addToBlockList("127.0.0.1"); console.log(block_list); })();
這樣可以避免渲染 window Global Variable。如果你是用 CoffeeScript 來寫,可以寫成底下
(-> block_list = [] addToBlockList = (item) -> block_list.push item if block_list return return )()
但是我建議可以使用 block_list?
寫法
(-> block_list = [] addToBlockList = (item) -> block_List?.push item return return )()
轉成的 JavaScript 會是
(function() { var addToBlockList, block_list; block_list = []; addToBlockList = function(item) { if (typeof block_List !== "undefined" && block_List !== null) { block_List.push(item); } }; })();