0
的code in question:爲什麼在窗口對象中將全局聲明的變量的值設置爲相同的值?
(function(window){
ps = {},
ps = window.ps,
ps.subscriptions = [],
ps.subscribe = function(name, callback){
ps.subscriptions.push({"name": name, "callback": callback});
return [name,callback];
},
ps.unsubscribe = function(args){
for(x=0;x<ps.subscriptions.length;x++){
if(ps.subscriptions[x].name == args[0], ps.subscriptions[x].callback == args[1])
ps.subscriptions.splice(x, 1);
}
},
ps.publish = function(name, args){
var temp = [];
if(ps.subscriptions.length > 0){
for(var x=0;x<ps.subscriptions.length;x++) {
if(ps.subscriptions[x].name == name)
temp.push({"fn":ps.subscriptions[x].callback});
}
for(x=0;x<temp.length;x++){
temp[x].fn.apply(this,[args]);
}
}
};
console.log(window.ps);
console.log(ps);
})(window);
我的問題:
- 我認爲所有的方法/變量被宣佈在
global
範圍,是否正確?我問,因爲這個假設驅動了我有的其他問題,我想確保我沒有錯過任何東西。 - 如果在上述行中他已經在全局範圍內聲明瞭
ps
,那麼在做什麼ps = window.ps
?是不是正在做什麼相當於ps = ps
? - 如果問題2中提到的上述邏輯有一個名稱或約定, 是什麼?我想不出有什麼方法可以讓Google看到我在看什麼。
如果任何人有更好的方式來描述技術,並想更新我的問題標題,以便更容易找到,請隨時這樣做。
該代碼在開始時缺少'var'關鍵字。它會在「嚴格」模式下引發錯誤。 – Pointy
@積分好的,很好。當我看到變量被聲明的方式並開始思考「什麼......」時,我並不瘋狂。 –
是的,懶惰的隱式全局變量是一種不好的做法,可能會導致各種各樣令人頭疼的錯誤。 – Pointy