2017-06-27 112 views
2

我一直認爲聲明是一個指令,當到達分號;時結束,它是一個原子執行單元。聲明的Javascript概念

WIKI:

在計算機編程,聲明是表達一些 動作進行命令式編程語言的最小的獨立 元素。它是以高級 語言編寫的指令,用於命令計算機執行指定的操作。

W3C

分號分隔JavaScript語句。添加一個分號每個可執行語句

幾乎結束 恢復我的想法,但我很樂意與你們在這些情況下的一些想法。

殼體1:

var MyPromise = GetPromise(); //first statement 
MyPromise.then(function(){ 

}); //second statement 

殼體2:

GetPromise() 
.then(function(){ 

}); //first statement 

維基源聲稱考慮高級語言談論語句時(如報告)

這是一個用ah寫的指令IGH高級語言..

其實我也不知道怎麼源可信的,但如果我考慮到高水平的JavaScript代碼(不解釋生成的機器代碼)這兩種情況產生相同的行爲,在這裏顯然我們在第一個塊和第二個塊中有兩個不同的語句。

這兩個代碼塊之間是否有區別?應該有理由選擇一個替代另一個(而不是可讀性)?

+0

'GetPromise(然後,捕捉)'¯\\ _(ツ)_ /¯ – GottZ

+1

的小的解釋什麼'.'作用:它指的是由前面的表達式返回的對象。這樣的表達可以是函數執行,也可以是變量或定義。點簡單地操作返回的對象。而已。 (並且是的,即使'.then()'也會返回promise對象,你可以基本做到:'.then()。then()。then()' – GottZ

+0

*聲明以a; * => alert結尾(「never結尾...我們有ASI「) –

回答

1

分號分隔的JavaScript語句

沒有,多虧了ASI我們不需要分號(在大多數情況下,它最好還是使用它們):

alert("two") 
alert("statements") 

所以分號是不是要走的路。讓我們看看這個案例

alert(test) 

有多少條語句?一個或兩個?因爲:

test 

也是一個聲明。準確地說,它是一個表達式語句。但其共同語言的使用只是調用他們表達式 [1]中的語句(即不表達語句)的數量可以自由地改變,例如:

a(); 
b(); 

"vs." 

a(),b(); 

我假定然後該語句流可以以某種方式由程序員控制。

是的。被稱爲編程。

應該有任何理由選擇一個替代另一個(而不是可讀性)?

可讀性! Theres沒有區別兩個陳述一個陳述包含兩個表達式

不過你的情況:

var MyPromise = GetPromise(); 
MyPromise.then(function(){ 
}); 

MyPromise存儲在窗口對象,因此它不會被somewhen回收。所以你告訴解析器你可能想在別的地方使用它。如果你不這樣做,將它存儲在窗口中是沒有意義的。

1:What is the difference between an expression and a statement?

+0

實際上,ASI不是救命的,在某些情況下,爲了防止出現錯誤,需要使用明確的分號。 https://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript – Karim

+0

@Karim *和它更好地使用它們* –