JS - 设置一个全局变量

时间:2013-05-18 15:27:44

标签: javascript variables

我想通过set函数设置一个全局变量,但它始终将其设置为undefined值:

var name;
var setName = function(name){
    this.name = name;
}

3 个答案:

答案 0 :(得分:3)

在这种情况下,您不使用this。 (它可以工作,但不一定。为什么?阅读this

只需使用:

var name;
var setName = function (aname) {
    name = aname;
}

还要确保此代码在另一个范围(函数)中

function foo() {
    // ...
    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
    }
    // ...
}

但这是一种糟糕的做法,所以尽量避免污染global namespace。如果出现以下情况,则在全局命名空间中考虑变量:

  • 它没有varname = ...,并且没有其他名为name的可见局部变量
  • 设置在window上(例如window.name = ...

答案 1 :(得分:1)

function(val){

    name = val

.......................

答案 2 :(得分:1)

首先,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
    })();        
})(); 
相关问题