- PVSM.RU - https://www.pvsm.ru -
Сегодня внимание общественности привлек забавный нелогичный баг, обнаруженный в Try .NET [1] – инструменте, предназначенном для встраивания в документацию интерактивных примеров на C#. Посмотреть открытый issue можно на Github по ссылке [2].
Приведенный код при выполнении (при вызове метода Math.Round) вместо вывода на печать значения внезапно открывает окно печати из браузера:
using System;
public class Example
{
public static void Main()
{
var x = Math.Round(11.1, MidpointRounding.AwayFromZero);
}
}

При помощи стектрейса ошибки и брейкпоинтов пользователями была найдена предположительная причина такого поведения — она скрывалась в библиотеке mono.js.

Разгадка проста. По всей видимости, кто-то хотел использовать в JS собственную функцию print() (или перепутал ее с console.log), но раз таковой не нашлось в области видимости, программа вызывает window.print(), которая действительно должна открывать окно печати текущего документа — поскольку window является глобальным объектом для главного потока в браузере.
На этот фолбек обратили внимание не сразу, но один из пользователей утверждает, что эта ошибка была исправлена еще в прошлом ноябре [3].
С целью избежания ситуаций, в которых возникают ошибки подобного рода, проект create-react-app ведет список «сбивающих с толку» браузерных глобальных переменных [4], поскольку допустить аналогичную ошибку достаточно просто:
handleClick() { // пропущен аргумент `event`
this.setState({
text: event.target.value // используется глобальная переменная `event`- ошибка!
});
}
Автор: Владимир Маслов
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/321406
Ссылки в тексте:
[1] Try .NET: http://try.dot.net/
[2] по ссылке: https://github.com/dotnet/try/issues/290
[3] была исправлена еще в прошлом ноябре: https://github.com/mono/mono/pull/11602
[4] список «сбивающих с толку» браузерных глобальных переменных: https://github.com/facebook/create-react-app/tree/master/packages/confusing-browser-globals
[5] Источник: https://habr.com/ru/post/456880/?utm_source=habrahabr&utm_medium=rss&utm_campaign=456880
Нажмите здесь для печати.