В чем разница в вызове function() и вызове function без "()"?
Мне необходимо использовать метод replace для строки. В документации https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replace есть пример кода:
function replacer(match, p1, p2, p3, offset, string) {
// p1 - не цифры, p2 - цифры, p3 - не буквы и не цифры
return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
Мы видим что функция replacer вызвана без параметров, хотя в определении самой функции она принимает их! Как это понимать?
Я написал нечто похожее на пример из документации:
const regExpression = /(\s+[a-z])/g;
let strTrimAfterReplace = strTrim.replace(regExpression, replacer);
function replacer(match){
return match.toUpperCase()
}
И у меня функция не вызывается вообще! Объясните пожалуйста что я не понимаю или в какой раздел документации смотреть.
Ответы (1 шт):
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
^^^^^^^ ^^^^^^^^
В вашем коде происходит вызов только одной функции - replace, при этом ей в качестве второго параметра передаётся ссылка на функцию replacer. После чего вызов функции replacer делается уже внутри функции replace (не вами).
А если бы вы тут указали replacer со скобками как replacer(...), то да - вы бы тогда сразу вызвали эту функцию, а вот функция replace получила бы уже не ссылку на replacer и возможность её вызвать, а результат работы функции replacer, вызванной с теми аргументами, которые вы ей при этом передали.
Но в данном контексте требуется именно ссылка на функцию, чтобы та функция, которая получает эту ссылку, могла сама вызвать эту функцию по ссылке в тот момент и с теми аргументами, с которыми она посчитает нужным её вызвать. Это очень удобный механизм, широко используемый в программировании и в частности в JavaScript.