Czy w funkcji JavaScript konieczne jest zdefiniowanie funkcji zagnieżdżonych jako wyrażeń funkcji lub czy deklaracje funkcji są dozwolone w treści funkcji? Na przykład, czy coś takiego byłoby zgodne?Funkcje zagnieżdżone Javascript
function a() {
function b() {
function c() {
window.alert(3);
}
window.alert(2);
}
window.alert(1);
}
Czy musiałbyś zrobić coś takiego?
function a() {
var a = function() {
var c = function() {
window.alert(3);
}
window.alert(2);
}
window.alert(1);
}
ECMA-262 mówi, że:
Kilka powszechnie używanych implementacje ECMAScript są znane obsługują FunctionDeclaration jako oświadczenie. Istnieją jednak znaczące i nie dające się pogodzić warianty pomiędzy implementacjami w semantykach zastosowanych do takich zgłoszeń FunctionDeclarations. Ze względu na te nie dające się pogodzić różnice, użycie funkcji FunctionDeclaration jako Statement skutkuje kodem, który nie jest niezawodnie przenośny wśród implementacji. Zaleca się, aby implementacje ECMAScript uniemożliwiały korzystanie z funkcji FunctionDeclaration lub wyświetlały ostrzeżenie po napotkaniu takiego użycia. Przyszłe wydania ECMAScript mogą definiować alternatywne przenośne środki do deklarowania funkcji w kontekście instrukcji.
Czy to oznacza, że deklaracja funkcji w treści funkcji jest nieprawidłowa pod względem technicznym, czy też jest to całkowicie błędne? Słyszałem, że ludzie odnoszą się do ciała jako blok, który zgodnie ze standardem jest jednym lub więcej stwierdzeniami, ale nie jestem pewien.
Nie jestem pewien, jaki jest standard, wydaje się nieco zagmatwany, ale szczerze mówiąc, nigdy nie miałem problemów z deklaracjami funkcji zagnieżdżania w IE8 + i wszystkich innych przeglądarkach. – elclanrs