2014-03-06 51 views
9

我知道你可以使用:执行功能时,为什么冒号符号会代替点?

打开我的控制台在Chrome浏览器,我可以执行:

window.open('http://google.ie') 

这工作正常。然后,我键入相同的,但使用一个冒号来代替:

window:open('http://google.ie') 

为什么使用:仍然工作和执行open功能?

+13

因为['开放的()'](https://developer.mozilla.org/en-US/ docs/Web/API/Window.open)是一个全局的,':'把'window'变成[label](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/声明/标签)。 –

+1

@JonathanLonowski - 听起来像一个答案。在结肠之后的几条新线将如何工作将会非常清楚。 – adeneo

+0

额外的实验表明':'实际上并不代替'.'-notation:'var foo = {}; foo.bar =函数(){}; FOO:酒吧; //给bar提供ref错误(即不要使用全局对象来测试它) – ajp15243

回答

12

:使得windowlabel而不是可变:

window: 
    open('...'); 

continue window; 

而且,由于window是在浏览器中的全局对象,open()是一个全球性的功能,并且可以具有或不具有其直接引用。

// both work 
window.open('...'); 
open('...'); 

但是,它并不适用于所有对象及其属性的完全替代:

var o = { foo: 'bar' }; 

o:foo // ReferenceError: foo is not defined 
+0

是的,真的很奇怪的语法。惭愧javascript也有'goto'病:p –

+0

@JonathanLonowski:我明白了。我阅读了关于MDN上的标签,但是为什么这个工作正在执行一个功能并且完全没有将它与标签关联起来,这引出了一个完整的空白。全球命名空间当时甚至没有进入我的脑海。我现在做JavaScript已经有几年了,现在仍然可以获得像这样完整的空白。感谢您及时的回复。 – Nope

+0

自千禧年以来,我一直在写JavaScript,而且我不知道这个语法。头脑风暴。我的意思是,显然我仍然不会使用它;;) –

相关问题