2017-06-29 34 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允许声明变量只有在全球范围内一次。稍后您可以只更改值,但不能再声明