为什么我无法在控制台中访问此全局变量?

时间:2017-06-29 11:35:08

标签: javascript jquery

为什么我无法在控制台中访问此全局变量?

let url;

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

每次点击都会打印出控制台,但如果我手动输入console.log(url),控制台会返回undefined。在我看来,它可以在本地工作,但不能在全球范围内工作。我希望通过全局变量访问列表中单击的内容。

我的目标是存储我在列表中单击的文本,以便可以在另一个页面或应用中的某个位置访问全局变量中的字符串,而不是本地变量。

5 个答案:

答案 0 :(得分:7)

您只需要声明一次全局变量。再次编写finally会创建一个新变量实例,作用于函数

所以你的代码应该是:

let url

答案 1 :(得分:2)

因为您的全局变量隐藏在function 内部变量中,并且同名。如果您认为它们是相同的,请重命名其中一个,或者只删除第二个let

let url;

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

答案 2 :(得分:2)

这是因为当您使用url关键字重新声明时,您会在本地覆盖let变量。这意味着您正在创建一个新的本地范围的url变量,该变量与尚未定义的全局变量分开。

只需重新分配即可。

let url;

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

答案 3 :(得分:0)

由于工作的url定义,代码顶部的url和函数中的let是不同的变量。第一个url可通过控制台全局访问。但是您没有为此变量赋值。因此它是undefined。因此,当您手动点击console.log(url)时,您会获得undefined

答案 4 :(得分: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允许在全局范围内仅声明变量一次。稍后您可以更改值但不能再声明