3 ms·
The following (contrived) JavaScript code does not work: let x = 5 (function() { console.log(x) })() The equivalent Go code works: package main impor
by xigoi 2y ago
The following (contrived) JavaScript code does not work:
let x = 5
(function() { console.log(x) })()
The equivalent Go code works:
package main
import "fmt"
func main() {
x := 5
(func() { fmt.Printf("%d", x) })()
}
- trealira 2y agoThanks, that's a good case. Actually, the JavaScript semicolon insertion algorithm [0] seems more complex than I had remembered. I had thought of them as variations on the semicolon insertion in BCPL, but it seems like that's an oversimplification. For reference, these are the BCPL rules: The canonical symbol SEMICOLON is inserted between pairs of items if they appeared on different lines and if the first was from the set of items which may end a command or definition, namely: BREAK RETURN FINISH REPEAT SKET RKET SECTKET NAME STRINGCONST NUMBER TRUE FALSE and the second is from the set of items which may start: a command, namely: TEST FOR IF UNLESS UNTIL WHILE GOTO RESULTIS CASE DEFAULT BREAK RETURN FINISH SECTBRA RBRA VALOF LV RV NAME ... ( ) [ ] § § are used to denote RBRA RKET SBRA SKET SECTBRA and SECTKET. [0]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#automatic_semicolon_insertion https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...