Ну, это не огромный риск для безопасности, хотя, по крайней мере, он обнаруживает потенциальные помехи.
Предположим, у нас есть очень хорошо закрытые модули JavaScript, которые загружаются на мою страницу, не зная друг о друге.Они из "доверенных", однако некоторые разработчики в lib2 допустили ошибку, см. Код.
Lib1 http://good.site/libs/the-famous-important-lib1.js
setInterval(function(){
alert('I am doing some important stuff');
}, 1000);
Lib2 http://not-excelent.site/libs/the-cool-lib2.js
var i = setInterval(function(){}, 0);
for(; i >= 0; i-=1) {
clearInterval(i);
}
Мой HTML
<script src="http://good.site/libs/the-famous-important-lib1.js" type="text/javascript"></script>
<script src="http://not-excelent.site/libs/the-cool-lib2.js" type="text/javascript"></script>
В браузере или, по крайней мере, в Firefox, загрузка Lib2 фактически полностью сломает Lib1.Некоторые могут сказать, что это не важно, и как глупо совершать такую ошибку.
Я считаю это плохим поведением.Так как мы загружаем все больше сторонних библиотек на наших сайтах.Возможно, правильное решение состоит в том, что setInterval
и setTimeout
должны возвращать Ojbect, чтобы он был действительно уникальным и не поддающимся изменению, а не просто числовым идентификатором автоматического увеличения.
Кто-то может столкнуться с реальным миромиспользование для этого (все еще не проверял, является ли это кросс-кадрами, я сомневаюсь в этом на самом деле).
Вопрос: Это так?и строгий режим в es5 преодолевает это?