代碼片段:
var p = {
name: 'stephen',
age: 23,
info: function() {
document.write('我的名字是:' + name); // ①
document.write('我的年齡:' + age); // ②
}
};
p.info();
name 和 age 是物件 p 的屬性,不在函數作用域鏈中。name、age,JS 引擎會沿作用域鏈向上查找,最終在 window (全域物件) 找到 window.name(瀏覽器內建屬性,默認空字串),卻找不到 window.age,故第 ② 行拋出 ReferenceError: age is not defined。window.name 存在且為字串類型,但值非預期的 'stephen'。var p = {
name: 'stephen',
age: 23,
info: function() {
document.write('我的名字是:' + this.name); // 或 p.name
document.write('我的年齡:' + this.age); // 或 p.age
}
};
p.info();
this.屬性名(方法調用時 this 指向調用物件)或 物件變數.屬性名。p.info() 調用時,this 指向 p;若 var f = p.info; f(),this 指向 window(嚴格模式下為 undefined),此時必須用 p.name 硬綁定。理解作用域鏈與 this 綁定,是避免此類低級錯誤的關鍵。