簡體   English   中英

如何使函數內部的變量成為全局變量?

[英]How to make a variable which is inside a function global?

以下是我的 javascript 函數,我想使用在函數外部選擇的變量,但我在檢查元素的控制台中選擇了未定義錯誤。 window.yourGlobalVariable 沒有解決我的問題。

function showMe(pause_btn) {
    var selected = [];
    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
}

如果你真的希望它是全球性的,你有兩個選擇:

  1. 全局聲明它,然后在函數中關閉var

     var selected; function showMe(pause_btn) { selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } }
  2. 分配給window屬性

    function showMe(pause_btn) { window.selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); // Don't need `window.` here, could use it for clarity though } } }

    window的屬性是全局變量(您可以在它們前面使用或不使用window.訪問它們)。

但是,我會避免讓它成為全球性的。 要么讓showMe返回信息:

function showMe(pause_btn) {
    var selected = [];
    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
    return selected;
}

...然后是你需要的地方:

var selected = showMe();

...或在包含showMe的范圍內聲明它,但不是全局聲明。 沒有上下文,這看起來與上面的 #1 完全一樣; 這里有一些背景:

(function() {
    var selected;
    function showMe(pause_btn) {
        selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
        return selected;
    }

    // ...other stuff that needs `selected` goes here...
})();

外部匿名函數是一個“作用域函數”,這意味着selected不是全局的,它只是該函數中的任何內容的共同點。

我建議不要將它分配給 window 對象或在函數之外聲明它,而是建議在函數之外創建自己的對象,然后從那里分配變量。 這避免了窗口對象的混亂,並將所有全局變量放在一個地方,使它們易於跟蹤。 例如,

var globalObject {}
function MyFunction {
  globalObject.yourVariableName=what your variable is
}

做這個:

var selected;

function showMe(pause_btn) {
    selected = [];
    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
}

您實際上可以跳過var selected;var selected; 行,但我更喜歡聲明我的變量。

不要使用這個;

 selected = [];

這是javascript的錯誤

window.selected = []; 

在你的函數里面。

您可以在定義名為showMe的函數的范圍內定義名為selected的數組。

在代碼方面:

var selected = [];

function showMe(pause_btn) {
    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
}
var selected = [];
function showMe(pause_btn) {

    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
}

如果您將selected聲明為 window 對象的一個​​屬性,您將能夠從其他任何地方訪問它。

function showMe(pause_btn) {
  window.selected = [];
  for (var i = 0; i < chboxs.length; i++) {
    if (chboxs[i].checked) {
      selected.push(chboxs[i].value);
    }
  }
}

暫無
暫無

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

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