При отладке проблемы веб-SPA я наткнулся на то, на что я не мог найти конкретные ссылки в Интернете: отсутствующий разделитель запятой между выражениями функций в javascript. Вот подробности:Является новой строкой разделителя в Javascript
Это работает - явная запятая в качестве разделителя есть (примечание - намеренно в одной строке):
var f1 = function() { console.log(1); }, f2 = function() { console.log(2);}
Это, однако, не похоже на работу, пытаясь его в Chrome консоль (опять же - один вкладыш на цели):
var f5 = function() { console.log(5); } f6 = function() { console.log(6);}
VM37860:2 Uncaught SyntaxError: Unexpected identifier
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
Тогда это, кажется, работает - уведомление отсутствует запятая:
> var f3 = function() {
console.log(3);
}
f4 = function() {
console.log(4);
}
< function f4()
> f4()
4
< undefined
> f3()
3
< undefined
Я ищу объяснение или ссылку на вопрос о том, почему многострочная, но отсутствующая запятая, похоже, работает.
В результате разветвления было то, что отсутствующая запятая в нашем источнике, которая проскользнула в сборку, вызвала неожиданное поведение в синтаксическом правильном комплекте сценариев (фрагмент сценария, содержащий отсутствующую запятую, связан вместе со многими другими компонентами на стороне сервера и выбрасывается как отдельный тег сценария в браузер). То есть Chrome и FF не сообщали о синтаксических ошибках, но поведение скриптов было неправильным (это сложный спа-центр на основе knockout.js, но казалось, что вызывалась неправильная функция из многих функций с таким же именем, но с различной областью; используется нокаут 2.x).
Независимо - мне интересно, может ли кто-нибудь объяснить поведение консоли с чистой точки зрения Javascript/Chrome, вне сферы действия SPA-центра с нокаутом.
почему! whyyyy! whyyyyyyyyy! :-) –