4. Book Generator - Exercises: jQuery, DOM and Events
Здравейте,
Може ли някой да сподели решение на задачата. Видях, че много хора са я решили. Аз успях да я подкарам в браузъра, но без да използвам IIFE и след като промених в HTML файла: от
window.onload = function () { createBook("#wrapper", "Alice in Wonderland", "Lewis Carroll", 1111); }
го промених на :
window.onload = createBook("#wrapper", "Alice in Wonderland", "Lewis Carroll", 1111);
Малко се обърквам от HINT-a, даден в условието на задачата: коя функция трябва да е външна и коя вътрешна. Ето ми го решението, което малко изкуствено го направих да работи в браузъра, но не мога да се ориентирам как да го накарам да работи в Judge:
function createBook(selector, title, author, isbn) { let id = 1; return function () { let text = ''; let divid = 'book' + id; text +='<div id="' + divid + '" style="border: medium none;">'; text += '<p class="title">' + title + '</p>'; text += '<p class="author">' + author + '</p>'; text += '<p class="isbn">' + isbn + '</p>'; text += '<button id="select">Select</button>'; text += '<button id="deselect">Deselect</button>'; text += '</div>'; id++; $(selector).html(text); let selectButton = $('#select'); let deselectButton = $('button:contains("Deselect")'); $('#select').click(function (event) { $('#'+divid).css("border", "2px solid blue") }); $('#deselect').click(function (event) { $('#'+divid).css("border", "none") }); } }
Благодаря за помощта! А можеш ли да разбереш защо гърмят останалите тестове? Според мен грешката е при входни данни за повече от 1 книга, ноне разбирам къде е грешката. Благодаря предварително!
Ето 100/100 http://pastebin.com/HBSPXENv , само не разбирам защо без let createBook = пред функцията, не работи в браузъра?!
Един пример който може да разясни малко как работят IIFE-тата е следният нека да погледнем едно IIFE:
IIFE (Immediately Invoked Function Expression) е точно както името му подсказва израз - когато сложим нещо в скоби то става израз, иначе казано за интерпретатора това IIFE и следният израз се евалюират по еднакъв начин:
Ако разгледаме израза (10 + 5) нека видим какво става с него - първо се извършват операциите в скобите и получаваме числото 15, после не записваме 15 никъде и резултата от израза е изгубен. Същото става и с IIFE-то, името на външната функция няма никакво значение защото самата фунцкия ще живее само за живота на израза, името на вътрешната функция може да се запази, обаче трябва да отбележем че "return function" не е декларация на функция, а е връщане на параметър, съответно няма да съществува функция която да може да извикаме с nestedFunc(). Както със случая с (10 + 5) ако не запишем резултата от израза в някаква променлива няма как да разполагаме с него, защото функциите живеят само за живота на израза. Така че очевидният отговор е:
По този начин може да разполагаме с nestedFunc като я запишем в променливата resultFunc.