Возможно ли это? Да.Или нет. В зависимости от того, какие предположения вы готовы принять.
Это происходит в текущих браузерах? Не знаю, хотя я никогда не пробовалэто.
Это хорошая идея? Нет. По крайней мере, на мой взгляд.Я не могу придумать причину, почему я хотел бы этого.Можете ли вы объяснить, почему вы хотели бы?
Возьмите только тот пример, который вы опубликовали:
1 (function()
2 {
3 function a(n){this.name=n;}
4 var a=this;
5 //more code in here
6 alert(a);
7 //})();
Итак, браузер видит, что есть выражение функции, которое неиметь закрывающий })
, и поскольку такое выражение функции на самом деле ничего не будет делать с битом ();
на конце, браузер должен предположить, что это было задумано, и сделать это тоже?Хорошо, теперь, в какой строке он должен добавить его?Это будет действительный исполняемый код, если он будет добавлен сразу после любой из строк 2, 3, 4, 5 или 6. Мне кажется, наиболее логичным местом для добавления отсутствующей закрывающей скобки является строка между 3 и 4, потому что таким образом *Объявление 1022 * не будет конфликтовать с определением function a
.Вы хотите, чтобы браузер уладил подобные вещи?
Должен ли браузер работать на «жадной» основе и включать как можно больше во внешнюю функцию?Как можно меньше?Поскольку вы могли бы поспорить, что IE будет «жадным», FF будет минимальным, Chrome будет выполнять веб-поиск, чтобы найти похожий, но полный сценарий на другой странице, и вместо этого использовать полный, а Opera просто сообщит об этом как об ошибке ине запускайте его.