function 函式物件
JS 的一級物件 (first class object)
- 可以被動態建立
- 可以指定給變數
- 可以擴展屬性或方法
提供了變數的作用域 (scope)
- 不以區塊
{}
建立作用域
var test = function () {
console.log('this is test func.');
};
typeof(test); // function
test.child = {}; // 可擴增屬性
test; // 不使用 () 回傳 function 物件
test(); // 使用 () 執行
函式表示式
var a = function test() { // 具名函式
// do something...
};
var b = function () { // 匿名函式
// do something...
};
函式宣告式
function test() { // 可以直接從 window 根物件下找到此函式
// do something...
}
區域變數
- 是靠著 function 提供的 scope 作為區隔
- 宣告變數時會成為內部物件的屬性或變數
function test() {
var name = 'Tony';
}
全域變數
- 代表根物件的屬性或變數
function test() {
address = 'Taiwan';
}
test();
console.log(address); // Taiwan
副作用其實不少,光命名衝突就包含以下狀況了。
- 第三方的 JavaScript Library
- 廣告方的腳本
- 第三方的用戶跟蹤和分析代碼
- 自定義不同的類型組件
保持良好的撰寫習慣可以省去不少踩雷除錯的時間。