Javascript JS-设置一个全局变量
我想通过set函数设置全局变量,但它总是将其设置为Javascript JS-设置一个全局变量,javascript,variables,Javascript,Variables,我想通过set函数设置全局变量,但它总是将其设置为undefinedvalue: var name; var setName = function(name){ this.name = name; } 在这种情况下,您不使用此。(它可以工作,但不一定。为什么?阅读) 只需使用: var name; var setName = function (aname) { name = aname; } 还要确保此代码不在另一个作用域(函数)内: 在这种情况下,名称将而不是是全局的,您
undefined
value:
var name;
var setName = function(name){
this.name = name;
}
在这种情况下,您不使用此。(它可以工作,但不一定。为什么?阅读) 只需使用:
var name;
var setName = function (aname) {
name = aname;
}
还要确保此代码不在另一个作用域(函数)内:
在这种情况下,名称将而不是是全局的,您必须省略其声明以使其成为全局的:
function foo() {
// ...
var setName = function (aname) {
name = aname; // not it is global, if not defined in the visible scope
}
// ...
}
但这是一种不好的做法,所以尽量避免污染环境。如果满足以下条件,则在全局命名空间中考虑变量:
- 它没有
(var
),也没有其他可见的局部变量name=…
name
- 它设置在
(例如window
)window.name=…
window.MyNamespace = {};
MyNamespace.name = '';
MyNamespace.setName = function(value) {
MyNamespace.name = value;
};
MyNamespace.setName('hello');
MyNamespace.name; // "hello"
根据您在模块中对此的评论,此代码将起作用:
(function(){
app = {};
app.myPerson = (function(){
var name;
var setName = function(value) {
name = value;
};
setName('Charlie');
console.log(name); // Charlie
})();
})();
window.name
是一个预定义属性,可能无法写入。请使用其他变量名或更好的名称,避免使用全局变量。此外,this.name
是否起作用取决于调用setName
的方式。您是将变量传递到函数中,还是期望函数自动执行用前面定义的name
变量神奇地填充name
参数/参数?很抱歉,我用global表示它在set函数之外,我来自Java。我通常使用this.name=name在Java中设置一个intance变量。你的setName方法应该在JavaScript对象中定义吗?是的nsidea模块:(function(){app.myPerson=(function(){var name;})(;})();模块是自包含的。如果需要访问app.myPerson.name,则需要将myPerson从模块更改为对象。谢谢,我使用global表示它不在set函数范围内,我来自Java。我通常使用this.name=name在Java中设置intance变量。尽管javascript在b处有“Java”开始,javascript与java没有任何关系,没有一件事。
window.MyNamespace = {};
MyNamespace.name = '';
MyNamespace.setName = function(value) {
MyNamespace.name = value;
};
MyNamespace.setName('hello');
MyNamespace.name; // "hello"
(function(){
app = {};
app.myPerson = (function(){
var name;
var setName = function(value) {
name = value;
};
setName('Charlie');
console.log(name); // Charlie
})();
})();