вспомнилась зачада с яндекса, которая поставила тогда меня в тупик
что вернёт функция? (function f() { function f() { return 1 } return f(); function f() { return 2 } })(); |
По-моему, задача не представляет сложности, если знать различия Function Declaration и Function Expression.
|
Вот вам реальная простенькая задачка, которая недавно возникла.
Реализовать функцию getWords(id), которая: 1. принимает в качестве аргумента строку css селектора (для простоты просто id dom элемента); 2. возвращает массив слов содержащихся внутри этого элемента, в том числе и в дочерних. Достаточно просто, но прикольно для начинающих. Тут и немного работы с dom, и в целом полезно. |
Мой вариант реализации самоопределяемой функции:
var displayName = (function() { function func() { alert('First name'); func = function() { alert('Second name'); }; } return function() { func(); }; })(); displayName(); displayName(); // Более удобный вариант function memoize(init, main) { function current() { init.apply(null, arguments); current = main; } return function() { current.apply(null, arguments); }; } var displayName = memoize(function() {alert('First name');}, function() { alert('Second name');}); displayName(); displayName(); |
сейчас пришла в голову ещё одна задачка. мне кажется, она будет зубодробительной :)
я сам то её решил. и да... работать эта задачка будет только в FF (версия - хз, свежая). итак, вот код с комментами, вместо условия. как сделать так, чтобы .... <div id=a>0</div> <script> a=document.getElementById('a'); /* тут пропущенный кусок моего кода */ // всё хорошо. при клике к содержимому // будет добавляться буква 'abc' // всё статично a.onclick = function(){ a.innerHTML += 'abc' }; </script> ... чтобы при клике по div к его innerHTML прибавлялись не 'abc', а 'ABC' ? |
в самом конце :)
а код нельзя менять. только дописать свой кусок. местонахождение определено комментами /**/ |
Цитата:
<div id=a>0</div> <script> a=document.getElementById('a'); /* тут пропущенный кусок моего кода */ (function(){ var cached = a.innerHTML; a.__defineGetter__('innerHTML', function(){ return cached; }); a.__defineSetter__('innerHTML', function(b){ cached = b.toUpperCase(); var div = document.createElement('div'); div.innerHTML = cached; for(var i = 0, length = a.childNodes.length; i < length; ++i){ a.removeChild(a.childNodes[i]); } for(var i = 0, length = div.childNodes.length; i < length; ++i){ a.appendChild(div.childNodes[i]); } }); })(); // всё хорошо. при клике к содержимому // будет добавляться буква 'abc' // всё статично a.onclick = function(){ a.innerHTML += 'abc' }; </script> |
Цитата:
Но то что melky, заявил тока про FF я тоже улыбнулся, геттеры и сеттеры давно поддерживаются и другими... Кроме любимого ИЕ =) |
devote, специально скрыл, желающие потом смогут посмотреть решение. Ну и оно для всех нормальных браузеров, а не только FF.
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 04:52. |