странный код ...
Читал одну статью на хабре - три часа потратил на то, чтобы понять самый первый пример ))
не сочтите за дибилизм, но объясните мне пожалуйста как работает вот этот пример
function f(args)
{
var self=this;
var k=args.k;
//вызываем себя же
try
{
f({k:k+1});
}
catch(ex)
{
alert(k);
}
}
var self=this;зачем в self записываем this ?? он же не используется потом - для того чтобы иметь дело с объектом ?? если да, то зачем ?? ведь можно же обойтись обычной функцией - объектом без превращения его в чистый объект. var k=args.k;что здесь происходит ?? что записывается в переменную k ??
f({k:k+1});
это что за вызов функции такой ?? я так понимаю в качестве аргумента передается объект, но почему можно передавать само тело объекта в качестве параметра в функцию? как потом вот это var k=args.k;обрабатывает этот вызов ?:blink: |
Цитата:
Цитата:
Цитата:
Цитата:
var object = {k: k+1};
f(object);
|
danik.js,
Цитата:
меня вот больше смутил тот факт что, все что можно и не можно названо одним именем - k. отсюда и вопросы все - например когда вызывается функция так
f({k:k+1});
значение свойства этого объекта копируется в локальную переменную k в функции (var k = ...) так ведь? тоесть получается что, в [[scope]] функции f создаются два разных свойства c одинаковым именем k ? или этот k создаётся один раз и потом при каждом новом вызове просто перезаписывается ? |
f({k:k+1});
Вызывается функция f которой передаётся объект с единственным свойством k равным k+1. Возможно более понятно будет так: f({"k":k+1}); т.е. то, что до двоеточия - это просто имя свойства объекта. |
Цитата:
var MyObj = new (function () {
var self = this;
this.myVariable = '12345';
return {
func1: function () {
return self.myVariable;
},
func2: function () {
return this.myVariable;
}
};
})();
MyObj.func1(); // "12345"
MyObj.func2(); // undefined
Т.е. var self = this; обычно используется для сохранения ссылки на контекст (объект вызова). |
Tim,
тоесть когда рекурсивно вызывается функция f({k:k+1}); каждый раз этот this ссылается на свойства и методы конкретного вызова в функции так ? но зачем это делать в примере из статьти - всё равно не понятно ... |
Цитата:
Цитата:
|
|
Цитата:
var obj = new (function() {
var self = this;
self.myVar = "this variable is from outer object!";
return {
f: function() {
return {
innerF: function() {
return {
innerFofInnerF: function() {
return {
self: self.myVar
};
}
};
}
};
},
};
})();
var result_f = obj.f().innerF().innerFofInnerF().self;
alert(result_f); // this variable is from outer object!
спасибо за помощь ) |
| Часовой пояс GMT +3, время: 08:12. |