在ECMAScript和AFAIR中有一個自動分號插入規則,它表示如果可能的話(無語法錯誤)將分號插入行尾,則插入分號。爲什麼ASI規則忽略箭頭函數中的換行符?
這裏有一個Y-combinator,使用箭頭功能寫着:
var Y = (F) =>
(x => F(y => x(x)(y)))
(x => F(y => x(x)(y)))
這將是一個語法錯誤,在第一行的末尾插入;
,但它的工作原理爲第二(第三,但沒關係)。 所以表達式應該被解析爲:
var Y = (F) =>
(x => F(y => x(x)(y)));
(x => F(y => x(x)(y)));
但隨着;
把明確二號線代碼的工作方式不同是肯定的,所以沒有ASI規則。
問題:爲什麼不插入分號?
「*如果可能,插入分號*」 - 否。 *必要時插入**以避免語法錯誤* – Bergi
另外'const Y = f => x => f(Y(f))(x)' – naomik