JavaScript

Замыкания в js, помогите разобраться)

фишка в скобках:
если хочешь передать саму функцию пишешь console.log( beetw ) без скобок.
когда пишешь beetw(3,6) функция выполняется и возвращает результат, этот результат - анонимная функция:
function(x){
if (a<x&&x<b)
return 1;
}
и эта функция и есть func(val) // val == x, а значения 3 и 6 сидят в замыкании

function()() - это к примеру та же конструкция function beetw. То есть функция возвращает функцию. первыми скобками вызываем саму функцию beetw() - результат будет анонимная функция, вторыми вызываем ту функцию, которую она возвращает.
если и так непонятно, то используй debugger; - в хроме все наглядно увидишь, firebug по мне не очень удобен.
Рома Цапович
Рома Цапович
7 120
Лучший ответ
Есть ещё ресурсы для обучения: https://developer.mozilla.org/ru/docs/Web/JavaScript/Closures
Павел Максютин
Павел Максютин
98 030
val - i-тый элемент массива arr
func - это beetw(3,6). То есть beetw уже вызвали и присвоили a=3, b=6
func(val) - вызываем функцию, которую возвращает функция beetw(a,b) и передаём ей (именно этой вложенной функции) аргумент val. То есть val передали в return function(x) вместо икса
Ты переводи всё на русский язык ! (как бы это странно не звучало, но это работает)
ВывестивЛог ( Отфильтровать ( ЧтоФильтруем, КакойФункциейФильтруем (ПараметрыСКлавы) ) )

Отфильтровать {
Для каждого ЭлементаМассива
Если ( КакойФункциейФильтруем (ЭлементМассива) ==Истина) arr_new.push(ЭлементМассива)

// Синтаксис конечно жесткий; Будет выглядеть примерно так
push 6
push 3
push ЭлементМассива
Call beetw

beetw:
pop ЭлементМассива ; код function(x) {
pop ...