Учитывая:Javascript изменяет переменную между вызывающей "методы"
function testfunc(i) {
this.foo = function() {
i = 2;
console.log("testfunc.foo before bar: " + i);
this.bar();
console.log("testfunc.foo after bar: " + i);
};
this.bar = function() {
i = 3;
console.log("testfunc.bar: " + i);
};
}
var testvar = {
foo: function() {
i = 4;
console.log("testvar.foo before bar: " + i);
this.bar();
console.log("testvar.foo after bar: " + i);
},
bar: function() {
i = 5;
console.log("testvarbar: " + i);
}
};
var a = new testfunc();
var b = Object.create(testvar);
i = 1;
a.foo();
console.log("main: " + i);
b.foo();
console.log("main: " + i);
Результат является:
"testfunc.foo до того бара: 2" scope.html: 37
«testfunc .bar: 3 "scope.html: 44
" testfunc.foo after bar: 3 "scope.html: 39
"Основной: 1" scope.html: 66
"testvar.foo до того бара: 4" scope.html: 51
"testvarbar: 5" scope.html: 58
«testvar .foo после бара: 5" scope.html: 53
"главная: 5" scope.html: 68
должен ли это быть так, что переменная я наследуется от одного метода/функция к другому в объекте javascript ? И означает ли это, что только несколько безопасный способ создания объекта в javascript использует «новый» для функции, или я полностью теряю точку?
Вау, я получил ключевое слово var назад, я думал, что это сделало вещи глобальными. Благодаря! – lash
@lash - Объявление 'var i;' в глобальной области видимости создает глобальную переменную. Объявление 'var i;' в области функций создает локальную переменную. Назначение 'i' без предварительного объявления автоматически создает глобальную переменную (что у вас было). Эти неявные глобальные переменные считаются плохой практикой и даже сейчас являются ошибкой, если вы ставите JS в строгом режиме (цель строгого режима - избегать плохой практики и помочь JS-движку рассказать вам о них). – jfriend00
Очень полезный ответ. Благодаря! – lash