Неожиданным сюрпризом для меня стало то, что если в метод передавать объект по значению, то все изменения в объекте будут видны за пределами метода.
Чтобы было более понятно, есть разница между определениями методов:
- Медот1( Параметр1)
- Метод1(Знач Параметр1)
Для второго примера, если в качестве значения в Параметр1 передается примитивный тип, то, чтобы ты не делал с ним внутри метода, за пределами этого метода значение останется тем, которое было до вызова метода.
А вот если в качестве значения передать объект (массив или таблица значений), то после выхода из метода, все изменения будут видны. Например если так передать массив, и удалить некоторые записи внутри метода, то после выхода из метода массив будет урезанным. Это работает, если нет прямой передачи между Клиентом и Сервером, т.е. если метод клиента вызывается из клиента, или метод сервера вызывается с сервера. Если метод клиента вызывает метод сервера, то при использовании ЗНАЧ, значение параметра ведет себя корректно, так как при передачи с клиента на сервер и обратно происходит сериализация значения параметра в строку и обратно не преобразовывается.
Есть статья по этому поводу здесь.
|