2014-03-06 48 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,而且我不知道這個語法。頭腦風暴。我的意思是,顯然我仍然不會使用它;;) –

相關問題