2017-06-29 77 views
0

我怎麼不能在我的控制檯中訪問這個全局變量?如何在我的控制檯中無法訪問此全局變量?

let url; 

$("li").click(function(){ 
    let url = $(this).text(); 
    console.log(url); 
}); 

控制檯打印出來時,我點擊,但如果我在console.log(url)手動輸入,控制檯返回undefined。在我看來,它可以在本地工作,但不能在全球範圍內工作。我想要通過全局變量訪問列表中單擊的內容。

我的目標是存儲我在列表中單擊的文本,以便可以在另一個頁面或應用程序的某個地方以字符串形式訪問全局變量變量,而不是本地變量。

回答

7

你只需要聲明一次你的全局變量。再次編寫let url會創建一個變量的新實例,該實例的作用域爲功能,範圍爲

所以,你的代碼應該是:

let url; 

$("li").click(function(){ 
    url = $(this).text(); 
    console.log(url); 
}); 
+0

謝謝,這個解決了它!非常感謝,它幫助我瞭解可變範圍! – VillageIdiot

+0

@KobyDouek 1點給你 –

+0

@SurenSrapyan謝謝你親切的先生:) –

2

因爲你全局變量隱藏在function通過內部變量同名。重命名其中一個,或者從第二個中刪除let,如果你認爲它們是相同的。

let url; 

$("li").click(function(){ 
    url = $(this).text(); 
    console.log(url); 
}); 
+0

1點也給您 –

+0

@KobyDouek謝謝 –

2

那是因爲你是在本地覆蓋url變量,當你與let關鍵字重新聲明它。這意味着您正在創建一個新的,本地範圍的url變量,與尚未定義的全局變量分開。

只需重新分配它,它應該工作。

let url; 

$("li").click(function(){ 
    url = $(this).text(); // remove the `let` 
    console.log(url); 
}); 
0

url在你的代碼的頂部,並在功能上url是因爲工作的let定義不同的變量。第一個url通過控制檯全局訪問。但是你沒有給這個變量賦值。因此它是undefined。因此,當您手動點擊console.log(url)時,您將獲得undefined

0

您需要了解letvar的實際含義。他們是不同的。

區別在於它們的使用範圍。 var用於將作用域設置爲其所使用的功能塊或代碼塊內的功能塊。所以,你可以用相同的名字在多個功能/代碼塊很容易聲明var這樣

function test(){ 
    var test1 = 5; 
    console.log(test1); //gives output 
    var test1 = 6; 
    console.log(test1); //gives output 
} 

但隨着let聲明的變量是不喜歡var它們是由內聲明它們的功能第一次訪問。如果它發現let已經使用這個變量名,那麼它將不允許你創建一個具有相同名稱的新變量名。

let test1 = 5; 
console.log(test1); //gives output 
let test1 = 6; //gives error since it is already declared 

所以,最簡單的方式瞭解的是,let允許聲明變量只有在全球範圍內一次。稍後您可以只更改值,但不能再聲明