'var' vs 'this' против переменных-параметров конструктора
В javascript приведены три функции-конструктора:
function Foo(data) {
var _data = data;
}
function Bar(data) {
this.data = data;
}
function Baz(data) {
//just use data freely.
}
Есть ли какая-либо разница, кроме видимости члена data
после построения? (например, вы можете сделать новый Bar().data
, но не new Foo().data
)
Ответы
Ответ 1
var _data = data;
создает локальную копию (а не ссылку) data
.
this.data = data
фактически создает свойство самого объекта.
Я рекомендую прочитать это (каламбур не предназначен): http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/
Ответ 2
Да, разница в том, как хранится переменная.
Переменная, объявленная с помощью var
, является локальной функцией конструктора. Он будет выходить за пределы вызова конструктора, если в области есть какая-либо функция, поскольку она затем фиксируется при закрытии функций.
Переменная, объявленная с помощью this.
, на самом деле не является переменной, а является свойством объекта, и она будет существовать до тех пор, пока объект выполняет, независимо от того, используется она или нет.
Edit:
Если вы используете переменные без их объявления, они будут объявлены неявно в глобальной области действия, а не в части объекта. Как правило, вы должны попытаться ограничить область своего объявления, чтобы не все попадало в глобальную область.