Skip to content

Latest commit

 

History

History
48 lines (33 loc) · 2.69 KB

File metadata and controls

48 lines (33 loc) · 2.69 KB

Выразы і аб'яўленне функцый

У JavaScript функцыі таксама з'яўляюцца аб'ектамі. Гэта значыць іх можна перадаваць і прысвойваць як і любыя іншыя аб'екты. Адзін, часта выкарыстоўваемы варыянт, гэтай магчымасці - перадача ананімнага метада як функцыі зваротнага выкліку іншай, магчыма асінхроннай функцыі.

Аб'яўленне function

function foo() {}

У вышэй прыведзеным прыкладзе функцыя уздымаецца перад тым як пачынаецца выконванне праграмы; Такім чынам, яна даступная паўсюль у зоне бачнасці, у якой яна была аб'яўлена, нават калі выклік адбываецца да фактычнага аб'яўлення ў кодзе.

foo(); // Працуе, бо функцыя будзе створана да выконвання кода
function foo() {}

function як выраз

var foo = function() {};

У гэтым прыкладзе пераменнай foo прысвойваецца ананімная функцыя.

foo; // 'undefined'
foo(); // уздыме TypeError
var foo = function() {};

Праз тое, што var - гэта аб'яўленне якое уздымае імя пераменнай foo перад тым як код будзе выкананы, foo будзе ўжо аб'яўленым калі ён пачне выконвацца.

Але так як прысвойванні адбываюцца толькі пад час выконвання, значэнне foo будзе змоўчанным (undefined) да выконвання адпаведнага кода.

Выразы з іменаванымі функцыямі

Яшчэ адзін выбітны выпадак - прысвойванне іменавай функцыі.

var foo = function bar() {
    bar(); // працуе
}
bar(); // ReferenceError

Тут, bar не даступны ў знешнім скоўпе, бо функцыя толькі прысвойваецца пераменнай foo; аднак, унутры bar, імя даступнае. Так адбываецца праз асаблівасці працы з прастранствамі імён у JavaScript - імя функцыі заўсёды даступнае ў лакальным скоўпе функцыі.