- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
function highlight(a, b) {
if (b == 2) {
var c = a.parentNode.parentNode
}
if (b == 3) {
var c = a.parentNode.parentNode.parentNode
}
if (b == 4) {
var c = a.parentNode.parentNode.parentNode.parentNode
}
addClassName(c, "focused", true);
var d = getElementsByClassName(document, "*", "focused");
for (i = 0; i < d.length; i++) {
if (d[i] != c) {
removeClassName(d[i], "focused")
}
}
}
норм, 4 уровня родители, вычисление длины массива в цикле d.length и какая то бессмысленная проверка if (d[i] != c), куча var, в общем буээ
http://www.flatsoft.com/js/wufoo.min.js
Int 11.09.2012 18:09 # 0
wvxvw 11.09.2012 18:22 # +3
var в ЯваСкрипте по правилам хорошего тона пишут один раз в функции, в самом верху. Есть люди, которым правила хорошего тона не нравятся, но меня, например, коробит, когда var используют где-то внутри блоков. Это потому, что все локальные переменные функции интерпретатором все равно "объявляются" в самом начале. Два раза объявлять одну и ту же переменную, как это сделано здесь - нет смысла / только путает. Ну и вообще, не понятно, чего ожидал автор когда, например, случилось бы, что b = 5.
bormand 11.09.2012 18:29 # +3
Поэтому я тоже двумя руками за правило "писать var в начале функции".
Steve_Brown 11.09.2012 19:53 # 0
bormand 11.09.2012 19:55 # +2
Мое имхо - лучше бы глобальные переменные помечались кейвордом var (или global), а остальные имели бы лексическую видимость. Так было бы интуитивнее и безопаснее.
3.14159265 11.09.2012 21:11 # 0
3.14159265 11.09.2012 21:24 # +1
Во. let сделали.
bormand 11.09.2012 21:32 # +1
HaskellGovno 11.09.2012 22:47 # +2
Я понял почему вы так подумали.
{ для вас аналог in, но семантически это не так.
В хаскеле let ... in x вертает x, в то время как в этом языке let ... {} вертает условно говоря void.
roman-kashitsyn 12.09.2012 15:01 # +1
В clojure (да и вообще во всех лиспах) let работается также, как и в Haskell, т.е. возвращает выражение.
Cхожесть, видимо, в том, что изменяется привязка имён в рамках куска кода. Однако же хаскелевский let тоже может временно менять биндинги переменных, хотя это обычно и не желательно. Если, конечно, в JavaScript не ввели динамическую область видимости переменных.
wvxvw 12.09.2012 17:45 # +1
Elvenfighter 11.09.2012 19:16 # 0
?
nur 11.09.2012 19:24 # +3
bormand 11.09.2012 19:28 # 0
3.14159265 11.09.2012 19:30 # +2
По крайней мере для тех кто когда-либо в сиподобных наступал на silent overflow.
bormand 11.09.2012 19:41 # +5
bormand 11.09.2012 19:28 # +2
Connor 27.09.2012 14:47 # 0
[code language='javascript']
if (b == 2) {
var c = a.parentNode.parentNode
}
if (b == 3) {
var c = a.parentNode.parentNode.parentNode
}
if (b == 4) {
var c = a.parentNode.parentNode.parentNode.paren tNode
}
[/code]
Можно было бы заменить на это:
[code language='javascript']
if(b>=2 && b<=4){
var c = a
for(var i=0;i<b;i++){
c = c.parentNode
}
}
[/code]