Javascript функция в функции синтаксис

Как передать функцию в функцию js

Функция в функцию передаётся как обычный параметр, так же, как это работает с любыми другими значениями. Например:

const sayHello = () =>  console.log('Hello!'); >; const execFunc = (func) =>  func(); >; execFunc(sayHello); // => Hello! 

Частая ошибка, когда новички передают не саму функцию, а вызов функции. Будьте внимательны, при таком подходе, сначала вычислиться то, что мы передаём, затем это значение попадёт в функцию:

const sayHello = () =>  console.log('Hello!'); >; const execFunc = (func) =>  func(); >; execFunc(sayHello()); // => TypeError: func is not a function 

Ошибка возникает, потому что в функцию execFunc() передаётся не функция, а вызов функции sayHello() .

Источник

function

Их отличие — в области видимости. Присвоенная анонимная функция видна с момента присвоения, а объявленная явно — везде:

// функции определены ниже alert(decl) // функция видна, все ок alert(anon) // функция еще не определена — ошибка // сами функции function decl(a) < >var anon = function(a)

Функция, объявленная внутри другой функции, видит переменные внешней функции. Они доступны ей даже тогда, когда родительская функция завершила исполнение. Это называется замыканием.

Значение возвращается оператором return . Функции без return или с return без значения возвращают undefined.

В теле функции доступна специальная переменная arguments , которая содержит параметры и ссылку на объект, представляющий собой текущую функцию (в javascript функции — объекты класса Function):

// Вызов func(5) // Выведет function func(a,b) < alert(arguments.length) // 1 alert(arguments[0]) // 5 alert(arguments[1]) // undefined alert(arguments.callee) // ссылка на функцию func >

См. также

В примере про видимость функций происходит вызов функции без параметра alert(decl) , хотя ниже идет ее определение с параметром function decl(a) < >Я чего-то не понимаю или в JavaScript допустим такой вызов функций, хотя определены они с параметром?

Тут идет не вызов функции.
Если выполнить данный код, то мы увидим в окне сообщений тело функции. Ни о каком вызове здесь речи не идет.

Кстати, этот вопрос (для новичка) уместен.

Нет нигде здесь в справочнике описания оператора (или синтаксической конструкции) «вызов функции». Здесь, либо в разделе «Синтаксические конструкции», либо в разделе «Операторы» (что, мне кажется правильнее) надо бы дать информацию: как вызывается функция, как передаются параметры. Если это уже есть — ткните меня туда носом.

(?) Например, мне на текущий момент (в спецификации ECMAScript не смотрел) как / можно ли передать функции аргументы по ссылке, а не по значению. Т. е., чтобы значение переменной, указанной при вызове функции изменилось после вызова этой функции. Знаю способ: передать аргументом массив — он передаётся по ссылке (проверил экспериментально), можно изменять его элементы — изменения сохранятся после возврата из функции. Есть ли более изящный / нормальный способ?
__________
Новичок в JS.

function showProps(obj) < var i, objName=obj+''; for (i in obj) document.write(objName+'.'+i+' = '+obj[i]+'
'); > function haveClass(obj,cl) < var r=false, c=obj.className.split(' '); for (var i=0;ifunction findParentClass(obj,cl) < . >function findChildClass(obj,cl) < . >function dropDownBlock(obj)

Хром, Опера, Сафари, ИЕ 6-7 отрабатывают отлично. А Файрфокс 3.6.13 цепляется ко второй ф-ции: "obj is undefined".

Может, подскажите, что не так? Пробовал другие имена вместо obj, чтоб не повторялись в след. ф-циях - не помогает.

у FF нету obj.parentElement, которое я использовал ниже, вместо объекта передавалась пустота. parentNode, думаю, поможет.

А что означает конструкция:

Не уверен, что правильно написал, но, возможно, кто-нибудь поймёт.

Источник

Читайте также:  Python sort dictionary by value and key
Оцените статью