簡體   English   中英

JS-設置全局變量

[英]JS - set a global variable

我想通過set函數設置全局變量,但是它總是將其設置為undefined值:

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

在這種情況下,請不要使用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
    }
    // ...
}

但這是一個習慣,因此請避免污染全局名稱空間 在以下情況下,將在全局名稱空間中考慮變量:

  • 它沒有varname = ... ,並且沒有其他可見的局部變量,稱為name
  • 它在window上設置(例如window.name = ...
function(val){

    name = val

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM