我正在JavaScrit函數中的閉包範圍掙扎。下面的函數應該創建三個具有不同圖像的樣本(可以工作),然後當點擊這些樣本時,應該切換樣式表。有兩個函數的JavaScript閉包範圍
問題是,即使逐步顯示第一個函數中的theme
變量確實會更改,也會將同一對象傳遞給switchTheme
函數。
var switcherConfig = {
themes:
{
'Orangeness': {
folder: 'ui-lightness'
},
'Red Matter': {
folder: 'blitzer'
},
'Flubber': {
folder: 'south-street'
}
}
}
function createThemeSwitcher(placeholderSelector) {
for (var themeName in switcherConfig.themes) {
var theme = switcherConfig.themes[themeName];
var anchor = $('<a/>')
//.text(theme.title)
.attr('title', theme.title)
.attr('href', '#')
.on('click', function() { switchTheme(theme); })
// append to DOM etc
}
}
function switchTheme(theme) {
var themeDirectory = switcherConfig.baseDirectory + '/' + theme.folder + '/';
// 'theme' variable is always the last in my 'themes' config object
}
謝謝。不完全確定,我知道這是爲什麼起作用,但確實如此。 – Echilon
這段代碼會創建一個匿名函數,它的值爲't'並返回一個調用'switchTheme'的函數。然後,您立即調用該匿名函數,並將它傳遞給'theme'的當前值。希望有所幫助。 – deceze
是的,我很困惑,但這看起來是正確的。你可以解釋嗎? – chovy