23.08.2011, 10:10
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
вспомнилась зачада с яндекса, которая поставила тогда меня в тупик
что вернёт функция?
(function f() {
function f() { return 1 }
return f();
function f() { return 2 }
})();
|
|
23.08.2011, 12:04
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
По-моему, задача не представляет сложности, если знать различия Function Declaration и Function Expression.
|
|
23.08.2011, 12:40
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
Вот вам реальная простенькая задачка, которая недавно возникла.
Реализовать функцию getWords(id), которая:
1. принимает в качестве аргумента строку css селектора (для простоты просто id dom элемента);
2. возвращает массив слов содержащихся внутри этого элемента, в том числе и в дочерних.
Достаточно просто, но прикольно для начинающих. Тут и немного работы с dom, и в целом полезно.
|
|
23.08.2011, 21:40
|
|
Аспирант
|
|
Регистрация: 25.02.2010
Сообщений: 57
|
|
Мой вариант реализации самоопределяемой функции:
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();
|
|
25.08.2011, 02:15
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
сейчас пришла в голову ещё одна задачка. мне кажется, она будет зубодробительной
я сам то её решил.
и да... работать эта задачка будет только в FF (версия - хз, свежая).
итак, вот код с комментами, вместо условия.
как сделать так, чтобы ....
<div id=a>0</div>
<script>
a=document.getElementById('a');
/* тут пропущенный кусок моего кода */
// всё хорошо. при клике к содержимому
// будет добавляться буква 'abc'
// всё статично
a.onclick = function(){ a.innerHTML += 'abc' };
</script>
... чтобы при клике по div к его innerHTML прибавлялись не 'abc', а 'ABC' ?
|
|
25.08.2011, 02:21
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
в самом конце
а код нельзя менять.
только дописать свой кусок. местонахождение определено комментами /**/
|
|
25.08.2011, 08:03
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Цитата:
|
работать эта задачка будет только в FF (версия - хз, свежая).
|
Опера, хромиум, FF5+:
<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>
|
|
25.08.2011, 08:28
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от B@rmaley.e><e
|
Опера, хромиум, FF5+:
|
Ты зачем решил? Задачки то для новичков специально, а ты им подсказки даешь.
Но то что melky, заявил тока про FF я тоже улыбнулся, геттеры и сеттеры давно поддерживаются и другими... Кроме любимого ИЕ =)
|
|
25.08.2011, 08:34
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
devote, специально скрыл, желающие потом смогут посмотреть решение. Ну и оно для всех нормальных браузеров, а не только FF.
Сообщение от devote
|
давно поддерживаются и другими
|
Ну, может он решил её как-нибудь иначе. Мало ли чего Mozilla могли напихать в свой движок.
|
|
25.08.2011, 08:42
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от B@rmaley.e><e
|
Ну, может он решил её как-нибудь иначе.
|
хотелось бы посмотреть на его решение =)
|
|
|
|