[英]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
從參數。
因此,為了避免沖突,您可以使用兩種方法。
防爆。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.