Ответ 1
В JavaScript эти выражения называются выражением функций (используя function
как оператор, а не объявления , используя function
в качестве оператора) и может быть назван или анонимным.
Это так же просто, как делать что-то, что говорит компилятору, что это выражение (например, var x =
), а затем записывать функцию обычно и добавлять разделитель ;
в конец.
function invoke(lam) {
console.log(
lam()
);
}
var lambda = function () {return 'foo';};
invoke(lambda); // "foo" logged
Как и любая функция в JavaScript, область наследуется от того, где она определена, а не там, где она вызывается.
Самозапускающиеся и анонимные функции почти всегда являются выражением функции. Для самозапускаемых функций (
before function
означает, что код интерпретируется как выражение, тогда (предпочтительный) ());
или (альтернативный) )();
вызывает его немедленно.
Возможно, вам нужно будет помнить, что выражение функции не поддерживается. Если вам нужно грузоподъемное для того, чтобы избежать ссылок ошибки, в сочетании с var
. Сама функция все равно будет недоступна до тех пор, пока код не перейдет к строке, где она определена.
Для имени функции функции имя доступно только внутри, а не снаружи (некоторые старые версии IE просочились в название). Чтобы описать это, я буду использовать два примера: один самозапускающийся и один var
d;
// self-invoked
(function foo() {
console.log('inside:', foo); // foo is defined here
}());
console.log('outside:', foo); // ReferenceError: foo is not defined
// var
var bar = function foobar() {
console.log('inside:', foobar); // foobar is defined here
console.log('inside:', bar); // bar is defined here too (=== foobar)
};
bar(); // invoke
console.log('outside:', bar); // bar is also defined here, but..
console.log('outside:', foobar); // ReferenceError: foobar is not defined