[英]Javascript: How can I access a function-scoped variable within a do while loop?
[英]In Javascript, how can I reference a function-scoped variable from a function called within that function but defined elsewhere?
我有一個類似這樣的Javascript函數,它在無法更改的地方定義:
foo.customSave = [];
foo.save = function() {
var saveString = 'initial value';
// stuff about saveString here
for (i in foo.customSave) { foo.customSave[i](); }
// more stuff about saveString here, including actually saving it
};
然后我有自己的代碼,如下所示:
bar.init = function() {
// other init stuff here
foo.customSave.push(function() {
saveString += 'something meaningful here';
});
// more other init stuff here
};
bar.init()
被調用在適當的時間(這就是說,前foo.save()
被調用)。 問題似乎是當我嘗試向其中添加'something meaningful here'
時未定義saveString
(將console.log
調用放在'something meaningful here'
即可確認這一點)。
我的customSave
函數可以以任何方式訪問該字符串,還是卡住了?
鑒於您無法修改與foo.save
關聯的函數,因此無法修改saveString
變量。 這是因為saveString
是局部變量,其作用域是與foo.save
關聯的foo.save
。 結果,您可以調用該函數,但是它基本上就像一個黑匣子,在其中您無法訪問在其中定義的變量(實際上,如果不查看源代碼,您甚至不會知道saveString
變量存在)。
在與相關的功能bar.init
,你要創建一個新的函數對象每次bar.init
被調用,它推到一個數組。 並且因為您沒有使用var
來聲明saveString
變量,所以JavaScript會嘗試在要推送到數組的函數中找到saveString
變量。 由於在此處找不到聲明,因此JavaScript將繼續在下一個外部范圍中bar.init
與bar.init
關聯的函數中的bar.init
。 由於也無法在其中找到JavaScript,因此JavaScript會最后嘗試在全局范圍內找到它(也不會在其中獲得成功)。
希望能有所幫助,但總而言之,不能修改foo.save
,您會陷入困境。
如何將saveString
添加為foo
的屬性?
像這樣:
foo.customSave = [];
foo.saveString = '';
foo.save = function() {
foo.saveString = 'initial value';
// stuff about saveString here
for (i in foo.customSave) { foo.customSave[i](); }
// more stuff about saveString here, including actually saving it
};
然后:
bar.init = function() {
// other init stuff here
foo.customSave.push(function() {
foo.saveString += 'something meaningful here';
});
// more other init stuff here
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.