我来自C#Class(),字段,属性,命名空间......世界。我刚刚开始使用javascript。到目前为止,我一直都很棒。然而,我的一个朋友正在查看我的代码并问我为什么这样做。
function Position (x, y) {
this.X = x;
this.Y = y;
}
朋友:“你刚刚超越位置...”
我:“什么位置?”
朋友:“可能是浏览器正在使用的任何东西。”
我:“我只运行这个脚本 - 它运行得很好”
朋友:“直到它不起作用。”
好的......什么?结果位置是全球 ..但是在哪里以及在何种程度上?我的朋友让整个浏览器听起来像是Global。所以我的问题是;
javascript Global,Global to the Entire Browser? >只有窗口? >只有标签? >它到底有多远?
答案 0 :(得分:4)
当前窗口是全局的。不要担心其他标签,窗口或iframe。这就是说我认为他试图说明的是JavaScript中的一个好原则,即
不要弄乱全局命名空间
意味着无论你做什么全球化都不应该太多,它应该是非常有意的。
JavaScript具有函数作用域(不是块作用域),因此解决此问题的一种简单方法是将所有内容包装在一个立即调用的函数表达式中。
;(function () {
function Position (x, y){
this.X = x;
this.Y = y;
}
// use Position here
}());
答案 1 :(得分:2)
当JavaScript在浏览器中运行时,全局变量是window
对象的属性。因此,它仅对当前窗口是全局的,而不是对其他浏览器窗口,选项卡,框架或iframe。其中每个都有自己的window
对象。
JavaScript内置了Position
全局。您朋友的担心可能是您在页面上包含的其他一些代码也可能定义了相同的全局代码。因此,其中一个定义(以后定义)将覆盖另一个定义。
答案 2 :(得分:0)
可以从浏览器窗口的任何位置访问位置。在网络术语中,我认为浏览器窗口是您可以使用的最高范围。
你的朋友可能会说的是,如果有人已经在全局范围内定义了一个名为Position的对象,那么你的代码就改变了这种行为。通常,您需要通过命名空间来保护全局范围与任何自定义方法。