2017-06-27 62 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 *和它更好地使用它们* –