这是关于javascript范围和制作API的问题,我有以下代码:
function test_objectExplorer()
{
var obj = {
a:true,
b:12,
c:{
a:12,
b:null
},
d:function(msg){
alert(msg);
}
};
alert(objectExplorer(obj));
}
function objectExplorer(obj)
{
var explore = function(obj,depthCount)
{
var str = "";
for(var prop in obj)
{
for(i=0; i<depthCount; i++)str += " ";
str += prop + " = " + obj[prop] + "\n";
if( (typeof obj[prop] == 'string') || obj[prop] instanceof String)continue;
str += explore(obj[prop],depthCount+1);
}
return str;
}
return explore(obj,0);
}
我使用objectExplorer函数来“查看”javascript对象。正如您所见,它是内部探索函数,它实际上正在完成工作,但我使用第二个参数作为深度计数器来为输出字符串提供适当的文本缩进。
我不希望用户必须使用一个需要额外参数的函数,该函数总是必须在第一个实例中作为数字0提供,所以我将它包装在'API'函数调用objectExplorer中。我的问题是,这是正确的方法吗?我来自C#,Java和其他基于类的OOP语言,其中的API只是公共属性和方法,但在javascript中,我知道除了将其声明隐藏在另一个对象中之外,无法将其设为私有。
答案 0 :(得分:1)
在JavaScript中,函数确定变量的范围。所以
function() {
for (var i=0 ; i<10;i++) {
var a = i;
}
alert(a);
}
会警告9,因为变量在同一个函数内。
如果您想制作模块,这可以帮助您:http://blog.davidpadbury.com/2011/08/21/javascript-modules/