带有两个函数的JavaScript闭包作用域
我正在努力解决JavaScrit函数中的闭包范围问题。下面的函数应该创建三个具有不同图像的样例(可以使用),然后单击这些样例时,应该切换样式表 问题在于,即使单步执行显示第一个函数中的带有两个函数的JavaScript闭包作用域,javascript,function,closures,Javascript,Function,Closures,我正在努力解决JavaScrit函数中的闭包范围问题。下面的函数应该创建三个具有不同图像的样例(可以使用),然后单击这些样例时,应该切换样式表 问题在于,即使单步执行显示第一个函数中的theme变量确实发生了变化,但相同的对象仍会传递给switchTheme函数 var switcherConfig = { themes: { 'Orangeness': { folder: 'ui-lightness'
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
}
var开关配置={
主题:
{
“橙色”:{
文件夹:“ui亮度”
},
“红色物质”:{
文件夹:“blitzer”
},
“Flubber”:{
文件夹:“南街”
}
}
}
函数createThemeSwitcher(占位符选择器){
for(switcherConfig.themes中的变量themeName){
var theme=switcherConfig.themes[themeName];
变量锚=$('')
//.文本(主题.标题)
.attr('title',theme.title)
.attr('href','#')
.on('click',function(){switchTheme(主题);})
//附加到DOM等
}
}
功能切换主题(主题){
var-themeDirectory=switcherConfig.baseDirectory+'/'+theme.folder+'/';
//“theme”变量始终是我的“themes”配置对象中的最后一个
}
调用函数时,开关主题(主题)
使用的值将是主题
处于的状态,在创建匿名回调时,该值未绑定。使用闭包绑定该特定值:
.on('click', (function (t) {
return function () { switchTheme(t); };
})(theme))
switchTheme(theme)
使用的值将是调用函数时theme
所处的状态,在创建匿名回调时该值不受约束。使用闭包绑定该特定值:
.on('click', (function (t) {
return function () { switchTheme(t); };
})(theme))
移动
单击函数
function createThemeSwitcher(placeholderSelector) {
for (var themeName in switcherConfig.themes) {
var anchor = $('<a/>')
//.text(theme.title)
.attr('title', theme.title)
.attr('href', '#')
.on('click', function () {
var theme = switcherConfig.themes[themeName];
switchTheme(theme);
})
// append to DOM etc
}
}
函数createThemeSwitcher(占位符选择器){
for(switcherConfig.themes中的变量themeName){
变量锚=$('')
//.文本(主题.标题)
.attr('title',theme.title)
.attr('href','#')
.on('click',函数(){
var theme=switcherConfig.themes[themeName];
切换主题(主题);
})
//附加到DOM等
}
}
移动
var theme = switcherConfig.themes[themeName];
单击函数
function createThemeSwitcher(placeholderSelector) {
for (var themeName in switcherConfig.themes) {
var anchor = $('<a/>')
//.text(theme.title)
.attr('title', theme.title)
.attr('href', '#')
.on('click', function () {
var theme = switcherConfig.themes[themeName];
switchTheme(theme);
})
// append to DOM etc
}
}
函数createThemeSwitcher(占位符选择器){
for(switcherConfig.themes中的变量themeName){
变量锚=$('')
//.文本(主题.标题)
.attr('title',theme.title)
.attr('href','#')
.on('click',函数(){
var theme=switcherConfig.themes[themeName];
切换主题(主题);
})
//附加到DOM等
}
}
您可以使用下面的.data
来代替闭包(只是一种替代方法):
var开关配置={
主题:
{
“橙色”:{
标题:“橙色”,
文件夹:“ui亮度”
},
“红色物质”:{
标题:“红色物质”,
文件夹:“blitzer”
},
“Flubber”:{
标题:"福伯",,
文件夹:“南街”
}
}
}
函数createThemeSwitcher(占位符选择器){
for(switcherConfig.themes中的变量themeName){
var theme=switcherConfig.themes[themeName];
var anchor=$('您可以使用。数据如下(只是一种替代方法):
var开关配置={
主题:
{
“橙色”:{
标题:“橙色”,
文件夹:“ui亮度”
},
“红色物质”:{
标题:“红色物质”,
文件夹:“blitzer”
},
“Flubber”:{
标题:"福伯",,
文件夹:“南街”
}
}
}
函数createThemeSwitcher(占位符选择器){
for(switcherConfig.themes中的变量themeName){
var theme=switcherConfig.themes[themeName];
变量锚=$(“theme.title在设置属性title时将失败theme.title在设置属性title时将失败该段代码生成一个匿名函数,该函数接受一个值t
,并返回一个函数,该函数使用该值调用switchTheme
。然后您立即调用该匿名函数,并将cur传递给它theme
的rent值。希望有帮助。是的,我很困惑,但这看起来是正确的。你能解释一下吗?这段代码生成了一个匿名函数,它接受一个值t
,并返回一个函数,该函数使用该值调用switchTheme
。然后你立即调用该匿名函数,并将cur传递给它主题的租金价值
。希望能有所帮助。是的,我很困惑,但这看起来是正确的。你能解释一下吗?