为什么默认情况下在浏览器中设置变量名称?

时间:2017-03-17 20:04:20

标签: javascript

我需要帮助理解我正在学习的东西。我的代码的某些行设置了一个变量 name ,它保存用户的名称,并在单击某个元素时设置。

我发现的问题是即使没有点击元素,用户仍然可以在控制台中访问它。

我认为我的代码出了问题,但我发现同样在另一个网站上访问它;例如,访问facebook上的变量会产生STATIC_URL。其他网站会产生空字符串,例如"_e_0MDe"

为什么会这样? 谢谢。

2 个答案:

答案 0 :(得分:4)

window.name只是DOM API的一部分。 Facebook必须设置它。

如果在裸脚本标记中声明变量,则将其视为Optional.ofNullable(myObj).ifPresent(obj -> { myObj.doSomething(); myObj.doOtherThing(); });

的一部分
window

为了防止使用函数创建新范围(或使用<script> var name = 'foo'; console.log(window.name); // "foo" </script>

let

答案 1 :(得分:0)

与许多脚本语言一样,JavaScript在变量声明和初始化中可能非常松散。这样可以快速开发,但也意味着您必须了解scoping

您可能会看到的是全球范围内的碰撞。默认情况下,浏览器有一个名为window的全局对象。此对象可以在您声明的任何函数中的任何位置使用。

当您未使用其中一个保留字(varletfunctionclassimport初始化某个块中的变量时,const),可以使用全局范围。例如,以下内容是等效的:

  • name = 'foo';
    window.name = 'foo';
    

为了帮助避免语法错误,开发人员通常会在代码顶部添加一个神奇的短语:

  • "use strict";
    

可以在John Resig的strict mode网站上找到更多信息。