Js сумны функцууд. JavaScript-ийн "энэ" түлхүүр үгийн тухай: тайлбартай ашиглах онцлог. Сумны функцийг ашиглах дүрэм

Тэд маш загварлаг болсон, бид тэдгээрийг бүх шинэ нийтлэлээс харж байна. Хэрэв та эдгээрт дасаагүй бол сумны функцуудыг агуулсан орчин үеийн (ES6) кодыг ойлгоход хэцүү байх болно.

Энэ нийтлэл нь тэдгээрийг хэзээ, хэрхэн ашиглахыг танд хэлэх зорилгогүй болно. Би үүнийг анх удаа харж байгаа хүмүүст зориулж шинэ синтаксийг тайлбарлахыг хичээх болно. Та үүнийг ашиглах эсэх нь чухал биш, гэхдээ эрт орой хэзээ нэгэн цагт хаа нэгтээ тааралдана. Тиймээс энэ шинэ синтаксийн механикийг ойлгох нь дээр.

Энд жижиг жишээ байна:

Const addOne = function(n) (буцах n + 1; )

Дээрх кодыг дараах байдлаар бичиж болно.

Const addOne = (n) => (буцах n + 1; )

Эсвэл, энэ тохиолдолд бүр богино:

Const addOne = (n) => n + 1;

Хоёрдахь жишээнд ( ... ) буржгар хаалт ашигладаг, гэхдээ энэ нь зөвхөн нэг мөр кодын хувьд буржгар хаалтуудыг орхигдуулж, буцаах нь гурав дахь жишээнээс харагдаж байна.

Нэг параметр

Сумны функц нэг параметртэй бол хашилтыг орхиж болно:

// байсан: someCallBack((үр дүн) => ( ... )) // Одоо: someCallBack(үр дүн => ( ... ))

Гэхдээ хэрэв параметр байхгүй бол та нээх, хаах хаалт ашиглах ёстой.

SomeCallBack(() => ( ... ))

Буцах дуудлагын функцууд

Функцийн сумнууд нь ялангуяа буцааж залгахад хэрэгтэй. JavaScript-г мэддэг хүмүүс түүний үг хэллэгийн хамрах хүрээг мэддэг бөгөөд энэ нь маш цэвэрхэн боловч иймэрхүү заль мэх хийж чаддаг ( энэ):

Var_this = энэ; someCallBack(функц() ( _this.accessOuterScope(); ))

Энэ "_this"-ын хэд хэдэн хувилбар байдаг ("өөрөө" эсвэл "тэр" гэх мэт), гэхдээ санаа нь адилхан. Буцаан дуудлагын функцүүдэд бид гаднах хамрах хүрээний хувилбарт хандах хэрэгтэй, гэхдээ санаа нь ижил байна. Буцаан дуудлагын функцүүдэд бид энэ хувилбарын гаднах хүрээний хувилбарт хандах хэрэгтэй бөгөөд энэ нь бид буцаан дуудлагын функцийн тухай ярьж байгаа тул өмнөхөөсөө өөр болсон.

Ашиглах замаар сумны функцууд, бид "блок хамрах хүрээ" ба "энэ"-ийг авдаг бөгөөд энэ нь хоёуланд нь ижил "энэ" юм. Энэ нь дээрх кодыг _this = thisгүйгээр дахин бичиж болно гэсэн үг юм.

SomeCallBack(() => ( this.accessOuterScope(); ))

"Боодол"

Үйл явдал болох React шиг нөхцөл байдлыг төсөөлөөд үз дээ onClick doSomething() , () гэж дуудах хэрэгтэй, гэхдээ бас doSomething() руу аргумент дамжуулах ёстой (жишээ нь ID). Энэ жишээ үнэндээ ажиллахгүй байна:

Зарим хэрэглэгч)))

Код ажиллах боловч техникийн хувьд хуудас ачаалагдах үед тэр даруй doSomething() гэж дуудна. Энэ асуудлыг шийдэхийн тулд зарим хөгжүүлэгчид боодлын функцийг ашигладаг:

Const User = React.createClass(function() ( render: function() (буцаах Зарим хэрэглэгч), onClick: function() ( doSomething(this.props.userId); ) ))

this.onClick-д хаалт байхгүй байгаа нь функцийн дуудлага гэхээсээ илүү функцийн лавлагаа гэсэн үг.

onClick() функц нь одоо doSomething()-д зориулсан багц юм. Сумны функцүүдийн тусламжтайгаар та ийм төрлийн "боодол" хийж болно:

Const User = React.createClass(function() ( render: function() ( буцах doSomething(this.props.userId))>Зарим хэрэглэгч )))

Өөр нэг хувилбар болгон бид .bind()-г ашиглаж болох бөгөөд үүнд ямар ч боодол шаардлагагүй (сумны функцууд болон бусад зүйлс):

Const User = React.createClass(function() ( render: function() ( Зарим хэрэглэгч буцаана ) ))

Сумны функцуудад зориулсан хөтөчийн дэмжлэг

Хэрэв танд өөр хөтөчийн дэмжлэг хэрэгтэй бол хамгийн сүүлийн үеийн хувилбарууд ChromeТэгээд Firefox, ашиглах Бабел дамжуулагчТаны бичсэн ES6 кодыг ES5 руу хөрвүүлэх.

ES6 нь функц үүсгэх шинэ аргатай болсон - Arrow => операторыг ашиглах. Ийм функцийг сум функц гэж нэрлэдэг. Тэд илүү нягт синтакс санал болгодог. Тэдэнд нэр байхгүй бөгөөд тэд өөр өөрөөр ажилладаг.

Бидний хийх хамгийн эхний зүйл бол файлуудыг хянаж, өөрчлөгдөх үед шинэ хувилбаруудыг үүсгэх Babel скриптийг ажиллуулах явдал юм.

Төслийн хавтсыг нээнэ үү тушаалын мөр(KS). Командыг оруулна уу:

Тэгээд Enter дарна уу

src хавтсанд бид arr.js файл үүсгээд index.html файлд шууд зааж өгнө.

</script>

Хөтөчүүдийн хамгийн сүүлийн үеийн хувилбарууд нь сумны функцийг шилжүүлэхгүйгээр дэмждэг бөгөөд миний хөтөч тэдний нэг юм.

Хоёр тоог нэмээд нийлбэрийг нь буцаадаг функц бичье. Функцийг add гэж нэрлэе.

Функц нэмэх (x, y) ( буцах x + y; ) console.log (нэмэх (3, 6));

Консол дээр бид үр дүнг харах болно - 9

Одоо энэ функцийг сум функц болгон хөрвүүлье.

Функц гэдэг үгийг хасъя, функцийн нэрийг хасаад буржгар хаалт, буцах үгийг хасъя. Параметрүүдийн дараа бид сум тавих болно.

= (x, y) => x + y гэж нэмье; console.log(нэмэх(4, 6));

Хэрэв та typeof операторыг ашиглан нэмэх хувьсагчийн төрлийг харвал:

Console.log(typeof(add));

Үүнийг бид функцийн консол дээр харах болно

Энэ нь сумны функцууд нь энгийн функцууд гэсэн үг юм. Мөн та шилжүүлсэн кодыг хараад үүнийг шалгаж болно.

"хатуу хэрэглэх"; var _typeof = typeof Symbol === "функц" && typeof Symbol.iterator === "тэмдэг" ? функц (obj) ( буцах typeof obj; ) : function (obj) ( буцах obj && typeof Symbol === "функц" && obj.constructor === Symbol && obj !== Symbol.prototype ? "тэмдэг" : typeof obj ; ); var add = функц нэмэх(x, y) ( буцах x + y; ); console.log(нэмэх(4, 6)); console.log(typeof add === "тодорхойгүй" ? "тодорхойгүй" : _typeof(add));

Бабел бидний кодыг энгийн функцийн илэрхийлэл болгон хувиргасныг бид харж байна.

Өгөгдсөн тоог квадрат болгох энгийн функц бичье.

= (x, y) => x + y гэж нэмье; console.log(нэмэх(4, 6)); console.log(typeof(add)); let квадрат = функц(а) ( a * a; буцаана ) console.log(квадрат (4));

Консолоос харцгаая:

Сумны функц дараах байдлаар харагдах болно.

квадрат = x => x * x;

Хэрэв сум функц нь зөвхөн нэг параметрийг авдаг бол хаалтанд оруулах шаардлагагүй болно!

Огт параметр авдаггүй функц бичье.

GivNumer () функц (33 буцах; ) console.log(givNumer ());

Энэ функц нь консол дээр 33 гэсэн тоог хэвлэдэг. Сум:

givNumer = () => 33; console.log(givNumer());

Юу ч буцаахгүй функц үүсгэцгээе. Энэ нь зүгээр л хөтчийн консол дээр мессеж харуулах болно.

Let log = function () ( console.log("Сайн уу Дэлхий!"); ); бүртгэл();

Солих:

Let log = () => console.log("Сайн уу Дэлхий!!!"); бүртгэл();

Бие нь хоёр мөрөөс бүрдэх функцийг үүсгэцгээе.

Функц нь хоёр параметрийг авна. Функцийн биед хувьсагч үүсгэцгээе. Үүний дараа бид үр дүнг буцаана.

Let mult = функц (a, b) ( үр дүн = a * b; үр дүнг буцаана; ) console.log(mult (4, 5));

Хэрэв сумны функцэд хэд хэдэн мөр байгаа бол буржгар хаалт - () шаардлагатай! Мөн return түлхүүр үгийг ашиглан энэ функц юу буцаадаг болохыг тодорхойлохоо мартуузай

Солих:

Mult = (a, b) => ( үр дүн = a * b; үр дүнг буцаана; ) console.log(mult (4, 5));

Одоо объектын утгыг буцаадаг функцийг үүсгэцгээе:

literal = function () ( буцах (нэр: "John"); ) console.log (literal ());

Консол дээр бид харах болно:

Одоо объектын утгыг буцаах сум функцийг бий болгохыг хичээцгээе.

Хэрэв сум функц нь объектыг шууд утгыг буцаавал хаалтанд оруулах шаардлагатай гэдгийг санах нь зүйтэй - ()

Сум функц нь объектыг шууд утгаар буцаадаг:

literal = () => ((нэр: "Жон")); console.log(literal());

Одоо сум функцийг IIFE - Immediately-invoked функцийн илэрхийлэл болгон ашиглахыг оролдъё

Товчхондоо, энэ нь мэдэгдлийн дараа шууд хэрэгждэг функц юм

Энэ нь дараах байдалтай харагдаж байна.

(функц () ( console.log("IIFE"); ))();

IIFE сумны функц нь дараах байдлаар харагдах болно.

(() => console.log("IIFE"))();

Сумны функцүүдийн чухал онцлог нь сум нь параметрийн дараа шууд ирэх ёстой!

Та үүнийг зүгээр л аваад доороос доошоо зурж болохгүй. Энэ нь алдаа өгөх болно!

Сумны функцүүдийн практик хэрэглээ. Сумны функцууд нь массивтай ажиллахад маш тохиромжтой.

Хэдэн тоогоор массив үүсгээд түүнийгээ тоо гэж нэрлэе. Массивууд нь массивыг давтах, шүүх гэх мэт ашигтай аргуудтай гэдгийг та мэднэ гэж бодож байна.

Бүх массивын хувьсагчийн нийлбэрийг тооцоолъё. Үүнийг хийхийн тулд би өөр хувьсагчийг зарлах болно - let sum = 0;

Массив болгонд байдаг forEach() аргыг ашиглая, бид элементүүдийг давтаж, нийлбэрт нэмнэ.

Тоонууд =; нийлбэр = 0; тоо.forEach(функц(тоо) ( нийлбэр += тоо; )); console.log(нийлбэр);

Консол дээр бид 55-ыг харах болно. Энэ функцийг сум функц болгон хувиргацгаая: numbers.forEach(num => sum += num); console.log(нийлбэр);

Тиймээс өмнө нь гурван шугамыг авч байсан зүйл одоо нэг мөр болж байна.

Мөн бид массивын элемент бүрийг квадрат болгож болно.

квадрат = тоо гэж үзье.map(n => n * n); console.log(дөрвөлжин);

Сумны функцууд ба энэ . Үүнийг хийхийн тулд би хүн хувьсагчид хадгалах объектын литерал үүсгэх болно.

person объект нь 'Bob' утгатай нэр шинж чанартай, 'Greet' утгатай мэндчилгээний шинж чанартай байх болно. Бид мэндчилгээг консол дээр хэвлэж, мөн үүний зорилгыг харна.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( console.log("Сайн уу! Миний нэр " + this.name); console.log(энэ); ) ); хүн.мэндлэх();

Хөтөчийн консол дээр бид мэндчилгээ болон тухайн хүн өөрөө өөрийгөө харах болно.

Одоо бид функцийг сумаар сольж, үүнд юу тохиолдохыг харах болно.

Хүн = (нэр: "Боб", мэндлэхийг зөвшөөрнө үү: () => ( console.log("Сайн уу! Миний нэр " + this.name); console.log(энэ); ) ); хүн.мэндлэх();

Одоо бид нэрний утгыг олж чадаагүй бөгөөд энэ нь цонхны утга юм!

Гэхдээ яагаад? Үүний утга нь функцийг зарласан контекстээс авсанд оршино. ! Энэ функцийг хаана гүйцэтгэх нь хамаагүй. Үүнийг зургаас харж болно:

Бидэнд хөтөлбөр бий.

Одоогоор цонхны объектоос өөр зүйл байхгүй. Хүний объект нэмсэн. Бид аргын хувьд сум функцийг ашигладаг болохыг анхаарна уу. Бидний хэлсэнчлэн үүний үнэ цэнийг контекстээс авна. Контекст бол хүрээлэн буй орчин юм. Энэ тохиолдолд тухайн хүний ​​объектын орчин, түүний бүх шинж чанар, аргууд нь байх болно цонхны объект. Хэрэв үүний утгыг контекстээс авсан бол энэ нь цонхны объектыг хэлнэ.

Хэрэв бид ердийн функцийг харвал энэ нь тухайн хүний ​​объекттой холбоотой гэдгийг бид мэднэ. Та яагаад сумны функцүүдийн утгыг контекстээс авсан бэ гэж асууж магадгүй юм. Хариулт нь маш энгийн - тэд үүнийг ингэж хийсэн! :-) Гол нь сумны функцуудыг өөр нөхцөл байдалд асуудлыг шийдэхийн тулд бүтээсэн явдал юм. Нэг жишээ авч үзье. Асуудлыг харахын тулд бид сумны функц руу буцна.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( console.log("Сайн уу! Миний нэр " + this.name); console.log(энэ); ) );

Манай Боб нэлээд завгүй байгаа бөгөөд ажлаа дуусгахад хэдхэн секунд шаардлагатай гэж төсөөлөөд үз дээ. 2 секунд хүлээнэ үү. бид setTimeout() функцийг ашиглан дуурайлган хийдэг; .Энэ функц нь эхний параметр болон хүлээх миллисекундын тоог хоёр дахь параметр болгон авдаг.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( setTimeout(функц () ( console.log("Сайн уу! Миний нэр " + this.name); console.log(энэ); ), 2000) ;))) хүн.мэндлэх();

Хэрэв та JavaScript-ийн туршлагатай бол асуудал юу болохыг ойлгосон гэж бодож байна. Ямар ч байсан хөтөч дээр юу тохиолдохыг харцгаая. Яг хоёр секундын дараа бид энэ зургийг хөтөч дээр харах болно.

Гэхдээ яагаад? Хэрэв та манай кодыг харвал энэ нь логик юм. Бид ердийн функцийг ашиглаж байгаа тул энэ нь хүн объектыг хэлдэг. Гол нь setTimeout() нь цонхны объектод харьяалагддаг. Хэрэв та үүнийг ингэж бичвэл: window.setTimeout() , тэгвэл юуг илэрхийлж байна гэж та бодож байна вэ? Мөн консол дээр бид ижил үр дүнд хүрэх болно! ES5 дээр энэ асуудлыг шийдэх хэд хэдэн арга байдаг. Бид хамгийн нийтлэг нэгийг нь авч үзэх болно: setTimeout()-аас өмнө би өөр хувьсагчийг зарлаж, үүнийг утга болгон өгөх болно. Одоо функцын биед үүний оронд бид үүнийг зааж өгөх болно.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( let that = this; setTimeout(function () ( console.log("Сайн уу! Миний нэр " + that.name); console.log(тэр) ; ), 2000); ) ); хүн.мэндлэх();

Одоо, хаагдсаны ачаар setTimeout() руу илгээсэн функц нь хувьсагч руу хандах боломжтой болно, түүний утга нь энэ байх болно, өөрөөр хэлбэл энэ тохиолдолд тухайн хүн объект болно.

Ойлгомжтой болгохын тулд та бидний энэ болон энэ нь юу болохыг харж болно.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( let that = this; setTimeout(function () ( console.log("Сайн уу! Миний нэр " + that.name); console.log("Энэ is my That = " + that); console.log("Энэ бол миний Энэ = " + энэ); ), 2000); ) ); хүн.мэндлэх();

Бид консол дээр баталгаажуулалтыг харах болно:

Энэ нь цонхны объект - This = байх ба энэ нь бидний хүн объект - That = байх болно гэдгийг бид харж байна.

ES6 дээр бид энэ асуудлыг шийдэхийн тулд сумны функцийг ашиглаж болно.

Хүн = ( нэр: "Боб", мэндлэх: функц () ( setTimeout(() => ( console.log("Сайн уу! Миний нэр " + this.name); console.log("Энэ бол миний Энэ = " + энэ); ), 2000); ))) хүн.мэндлэх();

Үүний үр дүнд бид консол дээр харах болно:

IN график жишээсумны функцийн хувьд контекст нь цонхны объект биш харин хүн объект байх болно. ийм учраас энэ нь хүнийг хэлнэ.

Компакт синтаксаас гадна иймэрхүү асуудлыг шийдэхийн тулд сумны функцийг нэвтрүүлсэн.

Лавлахын тулд та Бабел үүнийг хэрхэн шийдсэнийг харж болно

Var person = ( нэр: "Боб", мэндлэх: function greet() ( var _this = this; setTimeout(function () ( console.log("Сайн уу! Миний нэр " + _this.name); console.log(" Энэ бол миний Энэ = " + _this); ), 2000); ) ); хүн.мэндлэх(); Бабел бидний ES5-д ашигласан ижил аргыг ашигласан. Ганц ялгаа нь бид хувьсагчийг тэр гэж нэрлэсэн бөгөөд Бабел үүнийг - _this гэж нэрлэсэн. Хаагдсаны ачаар бидний setTimeout руу илгээсэн функц нь _this хувьсагч руу хандаж, үр дүнд нь person объект руу хандах боломжтой болно.

Энэ хэсгийн хамгийн хэцүү хэсэг бол хаалт хэрхэн ажилладагийг ойлгох явдал гэж би бодож байна.

Сумны функцүүдийн зарим онцлог шинж чанарууд:
Та миний нийтлэлээс ES6 болон сумны функцүүдийн талаарх дэлгэрэнгүй мэдээллийг харж болно

Сайн уу! Энэ нийтлэлд бид ES6-д ямар сум функцүүд байдаг, тэдгээрийг хэрхэн ашиглах талаар авч үзэх болно.

Arrow функцууд нь сум оператор (=>) ашиглан бичигдсэн функцууд юм.

Тэр даруй жишээг харцгаая:

= (x, y) => x + y гэж нэмье;
console.log(нэмэх(5, 2));

Энэ функцийг гүйцэтгэсний үр дүнд бид консол дээр 7 дугаарыг харах болно.

Эхлээд бид аргументуудыг хаалтанд хийж, дараа нь сумны тэмдэг тавьж, дараа нь функцийн кодыг өөрөө бичнэ. Манай тохиолдолд зүгээр л хоёр тоог аваад нэмдэг. Онолын хувьд энэ нь ES5 дахь функцийн илэрхийлэлтэй адил юм. Хэрэв та Babel эсвэл үүнтэй төстэй хөрвүүлэгч ашиглаж байгаа бол тэд дараах зүйлийг бичих болно.

Var add = функц нэмэх(x, y) (
буцах x + y;
};

Хэрэв таны функц зөвхөн нэг параметрийг авдаг бол хаалтанд нэмэлт оруулах боломжтой.

квадрат = x => x*x;

Энэ функц нь зөвхөн нэг аргумент авч, өгөгдсөн тоог квадрат болгоно.

Параметргүй функц:

func = () => 77;

Хэрэв таны функц хэд хэдэн мөр агуулсан бол нэгдүгээрт, та буржгар хаалт ашиглах хэрэгтэй, хоёрдугаарт, функц нь юу буцаадаг вэ гэдгийг бичихээ мартуузай. буцах түлхүүр үгийг ашиглана уу.

Үржүүлье = (x, y) => (
үр дүн = x*y;
үр дүнг буцаах;
};

Хэрэв та объектыг шууд утгаар нь буцаах шаардлагатай бол түүнийг хаалтанд боох хэрэгтэй:

getObject = () => (( брэнд: "BMW" ));

Өөрийгөө дуудах функц нь дараах байдалтай байна.

Сумны функцийн илэрхийлэл нь this , arguments , super , эсвэл new.target гэсэн түлхүүр үгстэй өөрийн гэсэн холбоосгүй ч гэсэн ердийн функцийн илэрхийллийн синтаксийн хувьд авсаархан хувилбар юм. Сумны функцийн илэрхийллүүд нь аргын хувьд тохиромжгүй тул тэдгээрийг бүтээгч болгон ашиглах боломжгүй.

Синтакс Үндсэн синтакс (param1, param2, …, paramN) => ( мэдэгдлүүд ) (param1, param2, …, paramN) => илэрхийлэл // үүнтэй тэнцүү: => ( буцах илэрхийлэл; ) // Хаалт нь "хэрэв" байвал сонголтгүй байна. зөвхөн нэг параметрийн нэр: (singleParam) => ( мэдэгдлүүд ) singleParam => ( мэдэгдлүүд ) // Ямар ч параметргүй функцийн параметрийн жагсаалтыг хос хаалтанд бичнэ.() => ( мэдэгдлүүд ) Нарийвчилсан синтакс // Объектийн шууд илэрхийлэлийг буцаахын тулд функцийн биеийг хаалтанд оруулна уу: params => ((foo: bar)) // Амралтын параметрүүд болон үндсэн параметрүүдийг дэмждэг (param1, param2, ...rest) => ( мэдэгдлүүд ) (param1 = defaultValue1, param2, …, paramN = defaultValueN) => ( мэдэгдлүүд ) // Параметрийн жагсаалт дотор бүтцийг устгах нь бас дэмжигддэг var f = ( = , (x: c) = (x: a + b)) => a + b + c; f(); // 6 Тодорхойлолт

Сумны функцийг нэвтрүүлэхэд хоёр хүчин зүйл нөлөөлсөн: богино функцүүдийн хэрэгцээ болон энэ түлхүүр үгийн зан байдал.

Богино функцууд var elements = [ "Устөрөгч", "Гелий", "Литиум", "Берилий" ]; // Энэ мэдэгдэл нь массивыг буцаана: elements.map (function(element) ( return element.length; )); // Дээрх ердийн функцийг элементүүдийн доор сум функцээр бичиж болно.map((element) => ( return element.length; )); // // Зөвхөн нэг параметр байгаа үед бид эргэн тойрны хаалтуудыг устгаж болно elements.map (element => ( return element.length; )); // // Сумны функц дэх цорын ганц хэллэг нь `return` байвал бид `return`-ыг хасч, // эргэн тойрны буржгар хаалтуудыг устгаж болно elements.map(element => element.length); // // Энэ тохиолдолд бидэнд зөвхөн уртын шинж чанар хэрэгтэй учир бид бүтцийг устгах параметрийг ашиглаж болно: // `length` нь бидний авахыг хүссэн шинж чанартай тохирч байгааг анхаарна уу, харин // тодорхой бус `lengthFooBArX` байна. зүгээр л өөрчлөх боломжтой хувьсагчийн нэр // хүссэн хүчинтэй хувьсагчийн нэр elements.map ((( length:lengthFooBArX )) => lengthFooBArX); // // Энэхүү бүтцэд өөрчлөлт оруулах параметрийн хуваарилалтыг мөн доороос харж болно. Гэсэн хэдий ч // энэ жишээнд бид зохиосон шинж чанарт `length` утгыг өгөхгүй байгааг анхаарна уу. Үүний оронд `length` хувьсагчийн шууд утга // өөрөө нэрийг бидний объектоос авахыг хүссэн өмч болгон ашигладаг. элементүүд.газрын зураг ((( урт )) => урт); // Үүнийг салгахгүй

Сумны функцээс өмнө шинэ функц бүр уг функцийг хэрхэн дуудсанаас хамааран өөрийн гэсэн утгыг тодорхойлсон:

  • Бүтээгчийн хувьд шинэ объект.
  • хатуу горимын функцийн дуудлагад тодорхойгүй байна.
  • Хэрэв функцийг "объект арга" гэж нэрлэсэн бол үндсэн объект.

Энэ нь объект хандалтат програмчлалын хэв маягийн хувьд тийм ч тохиромжтой биш болох нь батлагдсан.

Function Person() ( // Person() бүтээгч нь `this`-г өөрийн жишээ болгон тодорхойлдог. this.age = 0; setInterval(function growUp() ( // Хатуу бус горимд growUp() функц нь `-г тодорхойлдог. this` // глобал объектын хувьд (учир нь энэ нь growUp() хаана ажилладаг вэ.), // нь Person() бүтээгчийн тодорхойлсон `this`-аас ялгаатай // // this.age++; ), 1000) ; ) var p = new Person();

ECMAScript 3/5-д энэ утгыг хааж болох хувьсагчид оноож энэ асуудлыг засах боломжтой байсан.

Function Person() ( var that = this; that.age = 0; setInterval(function growUp() ( // Буцах дуудлага нь `that` хувьсагчийг илэрхийлдэг бөгөөд үүний // утга нь хүлээгдэж буй объект юм. that.age++; ) , 1000); ) "хатуу хэрэглэх"; var obj = (a: 10); Object.defineProperty(obj, "b", ( авах: () => ( console.log(this.a, typeof this.a, this); // тодорхойгүй "тодорхойгүй" Цонх (...) (эсвэл глобал объект) үүнийг буцаана.a + 10; // "Цонх" гэсэн глобал объектыг төлөөлдөг тул "this.a" нь "тодорхойгүй"-г буцаана ) ));

Шинэ оператор ашиглах

Arrow функцийг бүтээгч болгон ашиглах боломжгүй бөгөөд new -тэй ашиглах үед алдаа гаргадаг.

Var Foo = () => (); var foo = new Foo(); // TypeError: Foo бол бүтээгч биш

Прототип өмчийг ашиглах

Сумны функцууд нь прототип шинж чанартай байдаггүй.

Var Foo = () => (); console.log(Foo.prototype); //тэмдэглэгдээгүй

Yeld түлхүүр үгийн хэрэглээ

Yeld түлхүүр үгийг сумны функцийн биед ашиглах боломжгүй (үүнд цаашид үүрлэсэн функц дотор зөвшөөрөгдөхөөс бусад тохиолдолд). Үүний үр дүнд сум функцийг үүсгэгч болгон ашиглах боломжгүй.

Үйл ажиллагааны бие

Сумны функцууд нь "товч биет" эсвэл ердийн "блокны бие"-тэй байж болно.

Товч биетэд зөвхөн илэрхийлэлийг зааж өгсөн бөгөөд энэ нь далд буцах утга болно. Блокийн биед та тодорхой буцаах мэдэгдлийг ашиглах ёстой.

Var func = x => x * x; // товч үндсэн синтакс, "буцах" гэсэн утгатай var func = (x, y) => ( буцах x + y; ); // блокийн биетэй, тодорхой "буцах" шаардлагатай

Объектийн шууд утгыг буцаана

Товч биеийн синтакс параметрүүдийг => (object:literal) ашиглан объектын литералыг буцаах нь санаснаар ажиллахгүй гэдгийг санаарай.

Var func = () => ( foo: 1 ); // func()-г дуудах нь тодорхойгүй буцаана! var func = () => ( foo: function() () ); // SyntaxError: функцийн мэдэгдэлд нэр шаардлагатай

Учир нь хаалт (()) доторх кодыг хэллэгүүдийн дараалал болгон задлан шинжилдэг (жишээ нь foo нь объектын шууд утгын түлхүүр биш харин шошго гэж тооцогддог).

Та объектыг хаалтанд оруулах ёстой:

Var func = () => (( foo: 1 ));

Мөр тасрах

Сумны функц нь түүний параметрүүд болон сумны хоорондох мөрийн завсарлага агуулж болохгүй.

Var func = (a, b, c) => 1; // SyntaxError: хүлээгдэж буй илэрхийлэл, "=>" авсан

Гэсэн хэдий ч, кодыг үзэсгэлэнтэй, сэвсгэр хэвээр байлгахын тулд сумны ард мөрийн завсарлага тавих эсвэл доорх хаалт/хаалт ашиглан үүнийг өөрчилж болно. Та мөн аргументуудын хооронд мөрийн завсарлага тавьж болно.

Var func = (a, b, c) => 1; var func = (a, b, c) => (1); var func = (a, b, c) => (1 буцах); var func = (a, b, c) => 1; // ямар ч SyntaxError хаяглагдсангүй

Шинжилгээний дараалал

Хэдийгээр сумны функц дэх сум нь оператор биш боловч сумны функцууд нь ердийн функцтэй харьцуулахад операторын давуу эрхтэй харилцан үйлчилдэг тусгай задлан шинжлэх дүрэмтэй байдаг.

Буцаж залгах; буцаан дуудах = буцаан дуудах || функц (); // за буцаан дуудах = буцаан дуудах || () => (); // SyntaxError: буруу сум-функцын аргументууд буцаан дуудах = буцаан дуудах || (() => ()); // болж байна уу

Бусад жишээ // Хоосон сум функц нь тодорхойгүй буцаана let empty = () => (); (() => "foobar")(); // "foobar"-г буцаана // (энэ нь шууд дуудагдсан функцийн илэрхийлэл) var simple = a => a > 15 ? 15: a; энгийн(16); // 15 энгийн(10); // 10 let max = (a, b) => a > b ? a: b; // Массивыг хялбархан шүүх, зураглах, ... var arr = ; var sum = arr.reduce((a, b) => a + b); // 66 var even = arr.filter(v => v % 2 == 0); // var double = arr.map(v => v * 2); // // Илүү товч амлалтын хэлхээнүүд амлаж байна.then(a => ( // ... )).then(b => ( // ... )); // Параметргүй сумны функцууд нь нүдээр задлан шинжлэхэд хялбар байдаг setTimeout(() => ( console.log("Би илүү хурдан"); setTimeout(() => ( // илүү гүнзгий код console.log("Би дараа нь тохиолдох") ; ), арван нэгэн); Үзүүлэлтүүд Тодорхойлолтын төлөвийн тайлбар
ECMAScript 2015 (6-р хэвлэл, ECMA-262)
Стандарт Анхны тодорхойлолт.
ECMAScript-н хамгийн сүүлийн үеийн төсөл (ECMA-262)
Тухайн тодорхойлолтод "Сумын функцийн тодорхойлолт"-ын тодорхойлолт.
Ноорог
Хөтөчийн нийцтэй байдал

Энэ хуудсан дээрх нийцтэй байдлын хүснэгтийг бүтэцлэгдсэн өгөгдлөөр үүсгэсэн. Хэрэв та өгөгдөлд хувь нэмрээ оруулахыг хүсвэл https://github.com/mdn/browser-compat-data хаягаар орж, татах хүсэлтээ бидэнд илгээнэ үү.

GitHub дээрх нийцтэй байдлын өгөгдлийг шинэчлэх

Ширээний гар утасны сервер Chrome Edge Firefox Internet Explorer Opera Safari Android вэб үзэх Android-д зориулсан Chrome Firefox Android-д зориулсан Opera Android-д зориулсан Opera iOS дээрх Safari Samsung Internet Node.jsСумны функцууд Параметрийн арын таслал
Chrome Бүрэн дэмжлэг 45Edge Бүрэн дэмжлэг ТиймFirefox-ийн бүрэн дэмжлэг 22

Тэмдэглэл

Бүрэн дэмжлэг 22

Тэмдэглэл

Тэмдэглэл Firefox 39-ээс өмнө сумны функцийн аргументуудын дараа мөрийн төгсгөлийг (\n) буруу зөвшөөрсөн. Үүнийг ES2015 техникийн үзүүлэлт болон () \n => гэх мэт кодтой нийцүүлэхээр зассан
IE Дэмжлэг байхгүй №Opera Бүрэн дэмжлэг 32Safari бүрэн дэмжлэг 10WebView Android Бүрэн дэмжлэг 45Chrome Android Бүрэн дэмжлэг 45Firefox Android Бүрэн дэмжлэг 22

Тэмдэглэл

Бүрэн дэмжлэг 22

Тэмдэглэл

Тэмдэглэл Firefox-д сумны функцүүдийн анхны хэрэгжилт нь тэдгээрийг автоматаар хатуу болгосон. Энэ нь Firefox 24-ийн байдлаар өөрчлөгдсөн байна. "хэрэглэх хатуу" хэрэглээ; одоо шаардлагатай байна. Тэмдэглэл Firefox 39-ээс өмнө сумны функцийн аргументуудын дараа мөрийн төгсгөлийг (\n) буруу зөвшөөрсөн. Үүнийг ES2015 техникийн үзүүлэлттэй нийцүүлэхээр зассан бөгөөд () \n => () гэх мэт код нь одоо энэ болон дараагийн хувилбаруудад SyntaxError гаргах болно.
Opera Android Бүрэн дэмжлэг 32Safari iOS Бүрэн дэмжлэг 10Samsung Internet Android Бүрэн дэмжлэг 5.0nodejs Бүрэн дэмжлэг Тийм
Chrome Бүрэн дэмжлэг 58Edge?Firefox-ийн бүрэн дэмжлэг 52IE Дэмжлэг байхгүй №Opera Бүрэн дэмжлэг 45Сафари?WebView Android Бүрэн дэмжлэг 58Chrome Android Бүрэн дэмжлэг 58Firefox Android Бүрэн дэмжлэг 52Opera Android Бүрэн дэмжлэг 43Safari iOS?Samsung Internet Android Бүрэн дэмжлэг 7.0nodejs Бүрэн дэмжлэг Тийм
Домог Бүрэн дэмжлэг Бүрэн дэмжлэг Дэмжлэг байхгүй Тохиромжтой байдал тодорхойгүй Тохиромжтой байдал тодорхойгүй Хэрэгжилтийн тэмдэглэлийг үзнэ үү. Хэрэгжүүлэх тэмдэглэлийг үзнэ үү.
  • Заавар

Шинэ ECMAScript 6 стандартын хамгийн сонирхолтой хэсгүүдийн нэг бол сумны функцууд юм. Нэрнээс нь харахад сумны функцууд нь => сумыг ашигладаг шинэ синтаксаар тодорхойлогддог. Гэсэн хэдий ч, сайн синтаксаас гадна сумны функцууд нь уламжлалт функцээс бусад талаараа ялгаатай:

  • Лексик холболт. Үнэ цэнэ тусгай хувьсагч this , super , болон аргументууд нь сумны функцийг хэрхэн дуудсанаар бус харин тэдгээрийг хэрхэн үүсгэсэнээр тодорхойлогддог.
  • Үл хувиршгүй энэ , супер ба аргументууд . Сумны функц доторх эдгээр хувьсагчийн утгууд бүхэлдээ өөрчлөгдөөгүй хэвээр байна амьдралын мөчлөгфункцууд.
  • Сум функцийг бүтээгч болгон ашиглах боломжгүй бөгөөд шинэ оператортой ашиглах үед алдаа гаргадаг.
  • Аргументуудын хувьсагчийн "уугуул" утгыг ашиглах боломжгүй.
Эдгээр ялгааг нэвтрүүлэх хэд хэдэн шалтгаан байсан. Эхнийх нь binding нь JavaScript-д ихэвчлэн ашиглагддаг. Уламжлалт функцийг ашиглах үед энэ утгыг зөв алдах нь маш амархан бөгөөд энэ нь гэнэтийн үр дагаварт хүргэж болзошгүй юм. Өөр нэг шалтгаан нь JS хөдөлгүүрүүд эдгээр хязгаарлалтуудын улмаас сумны функцүүдийн гүйцэтгэлийг хялбархан оновчтой болгох боломжтой болно (бүтээгч болгон ашиглаж болох, өөрчлөхөд чөлөөтэй байдаг уламжлалт функцүүдээс ялгаатай нь). тусгай хувьсагч).


Тайлбар: Энэ нийтлэл нь ECMAScript 6-н сумны функцийг ойлгох тухай өгүүллийн үнэгүй орчуулгын эмхэтгэл бөгөөд техникийн үзүүлэлтийн хамгийн сүүлийн үеийн төслийг уншсан болно (2014 оны 1-р сарын 20, Төслийн Илч 22).

Синтакс Ерөнхийдөө сумны функцүүдийн синтакс дараах байдалтай байна.

Var fun = (x) => x;
Энэ нь Scala, CoffeeScript болон C# хэл дээрх ламбда илэрхийллийн синтакс зэрэг хэл дээрх ижил төстэй синтакстай маш төстэй юм.

Сумны функцүүдийн синтакс нь функцийг хэрхэн зарлахаас хамаарч өөр өөр байж болно. Тунхаглал нь үргэлж аргументуудын жагсаалтаас эхэлдэг ба дараа нь сум болон функцын их биетэй байдаг. Аргументуудын жагсаалт болон функцийн бие нь таны бичсэн зүйлээс хамааран өөр өөр хэлбэртэй байж болно.

Нэг параметр Нэг аргумент авч түүнийг буцаадаг сум функцийг зарлах нь маш энгийн:

Var reflect = утга => утга; // var reflect = функц (утга) (буцах утга; ) -тай тэнцэх
Сумны функц нь зөвхөн нэг аргументтай бол түүнийг хаалтгүйгээр зарлаж болно. Сумны дараах функцийн хэсэг нь буржгар хаалтгүй байж болох бөгөөд буцах түлхүүр үг агуулаагүй байж болно.

Олон параметр Гэхдээ хэрэв та нэгээс олон параметрийг зарлахыг хүсвэл параметрийн жагсаалтыг хаалтанд оруулах ёстой:

Var нийлбэр = (num1, num2) => num1 + num2; // var нийлбэртэй тэнцэх = функц(num1, num2) ( өгөгдлийн тоо1 + тоо2; );
Sum функц нь ердөө хоёр аргумент нэмдэг. Өмнөх жишээнээс цорын ганц ялгаа нь хаалт ба таслал (уламжлалт функцүүдийн нэгэн адил) байгаа явдал юм.

Параметр байхгүй Үүний нэгэн адил ямар ч аргументгүй функц нь хаалтанд хоосон параметрийн жагсаалттай байх ёстой:

Var sum = () => 1 + 2; // var sum-тай тэнцүү = function() ( буцаана 1 + 2; );

Уламжлалт функцийн биеийн синтакс Та сум функцийн үндсэн хэсэгт нэгээс олон илэрхийлэл агуулсан тохиолдолд уламжлалт функцийн синтаксийг ашиглаж болно. Өөрөөр хэлбэл, функцийг буржгар хаалтанд ороож, буцах түлхүүр үгийг нэмнэ үү:

Var нийлбэр = (num1, num2) => ( буцах тоо1 + тоо2; ) // var нийлбэртэй тэнцэх = функц (тоо1, тоо2) ( тоо1 + тоо2; );
Функцийн бие нь утгуудаас бусад тохиолдолд сонгодог функцтэй яг ижил аргаар боловсруулагдана тусгай хувьсагчэнэ , супер болон аргументуудыг өөр өөрөөр үнэлэх болно.

Object literal Буржгар хаалт агуулаагүй, зүгээр л объектын үгийн утгыг буцаадаг функцийн биеийг хаалтанд оруулах ёстойг тусад нь дурдах хэрэгтэй:

Var getTempItem = id => (( id: id, нэр: "Temp" )); // var-тай тэнцүү getTempItem = function(id) ( буцах ( id: id, нэр: "Temp" ) );
Объектын үгийн утгыг хаалтанд оруулах нь буржгар хаалт нь функцийн биетийн уламжлалт синтаксийн эхлэл биш, харин үгийн үсгийн эхлэл гэдгийг задлан шинжилэгчид хэлдэг.

Параметрийн хувьсах тоо Сум функц дотор "уугуул" аргумент объект байхгүй тул (аргументуудын утга нь сум функцийг зарласан уламжлалт функцийн аргументуудын утгатай үг хэллэгийн хувьд хамааралтай), дараа нь сумтай функцүүдийн хувьд Үлдсэн хэв маягийг ашиглах шаардлагатай параметрүүдийн хувьсах тоо бүтцийг устгах хэв маяг. Жишээ:

Var getTempItems = (...амрах) => амрах; // var getTempItems = function()-тай тэнцүү ( .slice.apply(аргумент) буцаана);

Загварыг параметр болгон устгах Энэ нийтлэлийн зорилгын үүднээс бид бүтцийг устгах хэв маягийг авч үзэхгүй - та эдгээр мэдээлэл нь хэсэгчлэн хуучирсан боловч JavaScript-ийн дараагийн хувилбар болох ECMAScript 6-ийн тойм нийтлэлээс уншиж болно.

Өмнөх жишээнээс харахад сум функц нь зөвхөн нэг аргументтай байсан ч гэсэн ашиглахдаа хаалт ашиглах шаардлагатай хэвээр байна. бүтцийг устгах хэв маягфункцийн цорын ганц параметр. Бусадтай хийсэн жишээ загварууд:

Var a = ((a)) => a; var b = ([b]) => b;

Сумны функцуудыг ашиглах Контекстыг тохируулах JavaScript-н нэг нийтлэг хувилбар бол функц дотор энэ утгыг зөв тохируулах явдал юм (холбох). Үүний утгыг тухайн функцийг гүйцэтгэж буй контекстээс хамааруулан өөрчилж болох тул огт өөр зүйлийг хэлэх үед нэг объект дээр андуурч үйлдэл хийх боломжтой. Дараах жишээг харна уу.

Var pageHandler = ( id: "123456" , init: function() ( document.addEventListener("товшилт", функц(үйл явдал) ( this.doSomething(үйл явдлын төрөл); // алдаа )); ) , doSomething: функц( төрөл) ( console.log("Харьцаж байна" + type + " for " + this.id) ) );
Дээрх кодонд pageHandler объект нь хуудасны товшилтыг зохицуулах ёстой. init() арга нь хүссэн үйл явдалд зохицуулагчийг хавсаргадаг бөгөөд үүнийг дотооддоо this.doSomething() гэж нэрлэдэг. Гэсэн хэдий ч код зөв ажиллахгүй болно. this.doSomething()-ын лавлагаа нь хүчин төгөлдөр бус байна, учир нь энэ нь төлөвлөсөн pageHandler-ын оронд үйл явдал зохицуулагч доторх баримт бичгийн объект руу чиглэнэ. Хэрэв та энэ кодыг ажиллуулахыг оролдвол баримт бичгийн объектод doSomething арга байхгүй тул алдаа гарах болно.

Та энэ утгыг handleEvent ашиглан pageHandler объект руу холбож эсвэл функц дээрх стандарт bind() аргыг дуудаж болно:

Var pageHandler = ( id: "123456" , init: function() ( document.addEventListener("товшилт", (функц(үйл)) ( this.doSomething(үйл явдал.төрөл); // алдаа )).bind(энэ)) ; ) , doSomething: function(төрөл) ( console.log("Харьцах" + type + " for " + this.id) ) );
Одоо код нь зориулалтын дагуу ажиллаж байгаа ч илүү төвөгтэй харагдаж байна. Нэмж дурдахад, та шинэ функц үүсгэх бүрт bind(this)-г дуудаж, энэ утга нь pageHandler-ийн утгатай холбоотой боловч код нь таны хүссэнээр ажилладаг.

Сумны функцууд нь энэ утгыг (супер болон аргументууд гэх мэт) лексик холболтыг ашигладаг тул асуудлыг илүү гоёмсог байдлаар шийддэг бөгөөд түүний утга нь сум функцийг үүсгэсэн газар дээрх утгаар тодорхойлогддог. Жишээлбэл:

Var pageHandler = ( id: "123456" , init: function() ( document.addEventListener("дарна уу", үйл явдал => this.doSomething(event.type)); ) , doSomething: function(type) ( console.log( "Харилцаж байна" + this.id-д зориулсан " + type + " ) );
Энэ жишээнд зохицуулагч нь this.doSomething() гэж дууддаг сум функц юм. Үүний утга нь init() функц болон доторх кодтой ижил байх болно энэ жишээнд bind() ашигласантай адил зөв ажиллах болно. this.doSomething() руу хийсэн дуудлага нь утгыг буцааж байгаа эсэхээс үл хамааран сумны функцийн бие дэх илэрхийлэлийг буржгар хаалтанд оруулах шаардлагагүй.

Нэмж дурдахад дээрх жишээ нь bind()-г дуудахаас илүү үр дүнтэй байдаг, учир нь энэ нь хөтөчийн дараах кодтой адил юм:

Var pageHandler = ( id: "123456" , init: function() ( var self = this; document.addEventListener("click", function(event) ( return self.doSomething(event.type) )); ) , doSomething: функц(төрөл) ( console.log("Харилцаж байна" + type + " for " + this.id) ) );
Өөрөөр хэлбэл, бүтээл үүсдэггүй шинэ шинж тэмдэг, bind() дуудлагын нэгэн адил.

Хэд хэдэн дуудлагын хооронд контекстийг "шидэх" Мэдээжийн хэрэг, та нэг сумны функцийг нөгөөд нь байрлуулж, ингэснээр эдгээр утгыг "шидэх" боломжтой:

Var obj = ( arr1: , arr2: ["a", "b", "c"] , холбох: функц(a, b)( буцаах a + "|" + b ) , огтлолцол: функц() ( үүнийг буцаана уу. .arr1.reduce((нийлбэр, v1) => // сум функц 1 this.arr2.reduce((нийлбэр, v2) => ( // сум функц 2 sum.push(this.concatenate(v1, v2)) буцах нийлбэр;) , нийлбэр) , )))) var arrSum = obj.intersection();//["1|a", "1|b", "1|c", "2|a", "2|b", "2|c", "3" |a", "3|b", "3|c"]

Аргумент болгон ашиглах Сумтай функцүүдийн богино синтакс нь тэдгээрийг бусад функцийн дуудлагад аргумент болгон дамжуулахад хамгийн тохиромжтой нэр дэвшигч болгодог. Жишээлбэл, хэрэв та массивыг эрэмбэлэхийг хүсвэл ихэвчлэн дараах зүйлийг бичнэ.

Var үр дүн = утгууд.sort(функц(a, b) ( буцаах a - b ));
Энгийн үйлдлийн хувьд нэлээд дэлгэрэнгүй. Сумны функцийн богино тэмдэглэгээтэй харьцуул.

Var үр дүн = утгууд.sort((a, b) => a - b);
Богино сумны функцийн синтакс ашиглан array() , map() , reduce() гэх мэт аргуудын хэрэглээг хялбарчилж болно.

Сумны функцүүдийн бусад онцлог Хэдийгээр сумны функцууд нь уламжлалт функцүүдээс ялгаатай боловч тэдгээр нь нийтлэг шинж чанартай байдаг:
  • Typeof оператор нь сум функцийн хувьд "функц"-ийг буцаана
  • Сумны функц нь мөн "анги" функцийн жишээ тул instanceof нь уламжлалт функцтэй адил ажиллах болно.
  • Та call() , apply() болон bind() аргуудыг ашиглаж болно, гэхдээ тэдгээр нь үүний утгад нөлөөлөхгүй гэдгийг санаарай.
  • Та toMethod() аргыг ашиглаж болно, гэхдээ энэ нь super ()-ийн утгыг өөрчлөхгүй. toMethod() аргыг es6-д нэвтрүүлсэн бөгөөд энэ нийтлэлд тусгаагүй болно).
Уламжлалт функцүүдээс мэдэгдэхүйц ялгаа нь шинэ оператор ашиглан сумны функцийг дуудах оролдлого нь ажиллах үеийн алдаа үүсгэдэг. Хураангуй Суман функцууд нь ECMAScript 6 дахь хамгийн сонирхолтой шинэлэг зүйлүүдийн нэг бөгөөд товч тодорхойлолтын синтакстай тул үйлдлийг хялбарчлах болно. функцийг параметрийн утга болгон өөр функцэд шилжүүлэх.

Товч синтакс нь нарийн төвөгтэй зүйлсийг илүү хялбар аргаар бичих боломжийг танд олгоно. Жишээлбэл, танигч үүсгэгч иймэрхүү харагдах болно (энэ нь es5 дээр илүү дэлгэрэнгүй харагдаж байна):

idGen = (эхлэх = 0, id = эхлүүлэх, дахин тохируулах = (newId = эхлэх) => id = newId, дараагийн = () => id++) => ((дахин тохируулах, дараагийн)); let gen = idGen(100); console.log(gen.next(), gen.next(), gen.reset(10), gen.next());//100 101 10 10
Мөн лексик холболт нь хөгжүүлэгчдэд хамгийн их өвдөлт, бухимдлын эх үүсвэрүүдийн нэгийг хааж, js хөдөлгүүрийн түвшинд оновчтой болгосноор гүйцэтгэлийг сайжруулах болно.


Хэрэв та сумны функцуудыг туршиж үзэхийг хүсвэл дээрх жишээнүүдийг асаалттай байгаа Firefox консол дээр ажиллуулж болно Энэ мөч(02.02.2014 FF28) нь сумны функцийг бараг бүрэн дэмждэг (FF28 нь аргументуудын утгыг буруу тооцдог).

Та мөн онлайн орчуулагч Traceur дээрх сумны функцууд болон бусад es6 функцуудыг туршиж үзэх боломжтой.

Шошго: шошго нэмэх