Внутренняя функция не имеет доступа к «снимку», она имеет полный доступ к переменной data
.
function outer() {
var data = 1;
...
someObject.method = function () {
data = 42;
};
someObject.method();
// data == 42
}
(Реальное объяснение состоит в том, что при использовании data
во внутренней функции Javascript попытается выяснить, в какой области находится data
. Он будет проходить по цепочке областей действия, чтобы найти место, где была создана переменная и это переменная, которая будет использоваться.)
Там нет "опасности", это одна из основных компетенций Javascript. Это как метод объекта, изменяющий свойства объекта. Конечно, вам нужно позаботиться о том, что вы хотите сделать, действительно ли вы хотите изменить переменную или вы просто хотите использовать ее локально?
Для «снимка» необходимо использовать замыкание:
function outer() {
var data = 1;
...
someObject.method = (function (data) {
return function () {
data = 42;
}
})(data);
someObject.method();
// data == 1
}