gpt4 book ai didi

JavaScript 闭包和变量作用域

转载 作者:行者123 更新时间:2023-11-30 13:17:15 24 4
gpt4 key购买 nike

我很难理解 JS 中闭包和变量作用域的概念。具体来说,如何访问类中深度嵌套的 styleData 变量,然后访问从该类创建的对象?

我确定我这里还有其他一些错误,所以请插话并在您认为合适的地方纠正我。谢谢!

var BuildJSON = {
convert: function() {
$.ajax({
type: "GET",
url: "style2.xml",
dataType: "xml",
success: function(xml) {
var styleData = $.xml2json(xml);
return styleData; // Do I need to return this somehow?
}
//How to get access to styleData??
});
},

styleData: this.convert();
};

var myClass = function() {
this.info = BuildJSON.styleData;
};

var myObject = new myClass;

alert(myObject.info.Style[0].name);

最佳答案

JavaScript 中的闭包是函数,因此在函数范围内声明的任何内容都只会在该函数内可见。

在您的示例中,styleData 是本地的,它属于 success 函数,无法在其他任何地方访问。最简单的解决方案是在 BuildJSON 范围的顶部声明该变量,在这种情况下,因为您将该对象声明为对象文字,您可以将其初始化为该对象的属性:

this.styleData = '',

...

success: function(xml) {
BuildJSON.styleData = $.xml2json(xml);
}

这种方法的“问题”是 styleData 是公开的,也许这不是您想要的。如果您想在 BuildJSON 中使用该变量但又不想公开访问该变量,则模块模式可以派上用场。

var BuildJSON = (function(){
var styleData = '', // local
convert = function(){ ... } // You can use style data here

return {
convert: convert // Return only stuff you want to be public
}
}())

关于JavaScript 闭包和变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com