簡體   English   中英

在函數中為其分配變量

[英]Assigning a variable to itself in a function

我試圖在一個函數中為其分配一個變量,並且如果該變量與該函數的參數具有相同的名稱,則它似乎不起作用,但如果它們的名稱不同,則可以。 一個代碼示例更清楚地顯示了這一點。

我應該期待這種行為嗎? 這是我的d3用例的精簡示例,此示例提示了此問題。 我也在下面顯示了這一點。

非工作示例

var a;

function assign(a) {
    a = a;
}
assign("test")
console.log(a)

未定義

工作實例

var a;

function assign(b) {
    a = b;
}
assign("test")
console.log(a)

測試

用例

var data
d3.csv("data.csv", function(error, data) {
    //Doesn't work for me
    data = data
}
console.log(data)

未定義

在第一個示例中,傳遞給函數的參數a 遮蓋了在外部定義的變量a ,因此: a=a是參數(傳遞給函數的參數)對其自身的賦值。

在Javascript中,作用域是功能級作用域,因此,每當引用變量時,都會在包含的作用域(函數)中搜索其聲明,如果找到它,則使用它,否則它將一直在原型鏈中搜索直到全局作用域。 因此,在你的情況下,它會嘗試尋找a和它創立它作為參數a所以它停止搜索有與使用a從參數。

因此,為了避免沖突,您可以使用兩種方法。

  1. 使用不同的名稱
  2. 如果要使用相同的名稱,請使用顯式范圍解析。

防爆。

var a;

function assign(a) {
   Global.a = a //Global is placeholder here for outerscope that variable a is coming from.
}
assign("test")
console.log(a);

有用的鏈接可讓您更清楚地了解

您可以使用window對象訪問全局變量。

var a;

function assign(a) {
    window.a = a; // specifying the scope.
};
assign("test")
console.log(a)

有關15-common-javascript-gotchas的更多信息

暫無
暫無

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

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