вспомнилась зачада с яндекса, которая поставила тогда меня в тупик
что вернёт функция?
(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, время: 14:49. |