странный код ...
Читал одну статью на хабре - три часа потратил на то, чтобы понять самый первый пример ))
не сочтите за дибилизм, но объясните мне пожалуйста как работает вот этот пример 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. |