Javascript JS-设置一个全局变量

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; } 还要确保此代码不在另一个作用域(函数)内: 在这种情况下,名称将而不是是全局的,您

我想通过set函数设置全局变量,但它总是将其设置为
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.name是一个保留属性,您不应该使用它

其次,为任何全局JavaScript命名是一个好主意,以避免这些类型的问题或与第三方库的冲突

下面是一个工作示例:

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
    })();        
})();