$arParams - это предопределенная для компонента переменная, представляющая собой массив входных параметров компонента. Ключами в этом массиве являются названия параметров, а значениями - их значения.
Перед подключением компонента ко всем значениям параметров применяется функция
[spoiler]Исходные значения параметров сохраняются в этом же массиве с теми же ключами, но с префиксом "~". Например, $arParams["NAME"] - входной параметр, к которому применена функция htmlspecialcharsEx, а $arParams["~NAME"] - исходный входной параметр.
Переменная $arParams является псевдонимом для члена класса компонента, поэтому все изменения этой переменной отражаются и на этом члене класса. В начале кода компонента должна быть произведена проверка входных параметров, инициализация не установленных параметров, приведение к нужному типу (например, IntVal()). Все эти изменения входных параметров будут доступны и в шаблоне. То есть параметры будут там уже проверенными и максимально безопасными. Дублирование подготовки параметров в шаблоне компонента не требуется.
$arResult
$arResult - это предопределенная для компонента переменная, в которую набирается результат работы компонента для передачи в шаблон. Перед подключением файла компонента эта параменная инициализируется пустым массивом array().
Переменная $arResult является псевдонимом для члена класса компонента, поэтому все изменения этой переменной отражаются и на этом члене класса. Значит явно передавать в шаблон эту переменную не нужно, это сделают внутренние механизмы класса компонента.
Псевдонимы в PHP
Псевдонимы (references) в PHP служат для того, чтобы к одним и тем же данным можно было обратиться по разным именам. Если переменные $arParams и $arResult изменены некоторым образом в коде компонента, то они будут доступны измененными и в шаблоне.
При этом нужно учитывать следующие нюансы:
Если в компоненте написать код
$arParams = & $arSomeArray;
то переменная $arParams будет отвязана от члена класса компонента и привязана к массиву $arSomeArray. В этом случае дальнейшие изменения $arParams не попадут в шаблон компонента.
Если в компоненте написать код
unset($arParams);
то это так же разорвет связь между $arParams и соответствующим членом класса компонента.