Funksiya bəyannaməsi. C obyekti olaraq funksiya elan edilməlidir. Javascript-də funksiya elanı ilə funksiya ifadəsi arasındakı fərqlər Birinci sinif javascript ifadəsi




C obyekti olaraq funksiya elan edilməlidir. İstifadəçi funksiyası bəyannaməsi, yəni. onun bəyan edilməsi iki formada - təsvir formasında və tərif şəklində həyata keçirilir.

Funksiyanın təsviri əvvəlcə onun prototipinin proqram faylını gətirməkdən ibarətdir. Funksiya prototipi kompilyatora məlumat verir ki, onun tam tərifi (onun tam mətni) daha sonra proqram mətnində veriləcək: cari və ya digər mənbə mətn faylında və ya kitabxanada yerləşir.

Dil standartı funksiyaları elan etmək üçün aşağıdakı üsuldan istifadə edir:

nəticə_növü ID _funksiyalar(dəyişən tip1, …, dəyişən N tipi);

Qeyd edək ki, prototipin mötərizələrində dəyişən identifikatorlarını göstərmək lazım deyil, çünki dil tərtibçisi onları emal etmir.

Prototip bəyannaməsi kompilyatora funksiyanın həqiqətən çağırıldığı zaman parametrlərin növlərinin və sayının uyğunluğunu yoxlamağa imkan verir.

Parametrlər siyahısı ilə əyləncəli bir funksiya təsvirinin nümunəsi:

float fun (int, float, int, int);

Tam funksiya tərifi belə görünür:

nəticə_növü ID _funksiyalar (parametr siyahısı)

funksiya kodu

Nəticə növü operatordan istifadə edərək dəyəri çağırılma nöqtəsinə qaytarılan ifadənin növünü müəyyən edir qayıtmaq<выражение> .

Funksiya növü göstərilməyibsə, standart tip qəbul edilir. int .

Parametr siyahısı parametr növlərinin və identifikatorların vergüllə ayrılmış siyahısından ibarətdir.

Funksiya heç bir parametrə malik olmaya bilər, lakin hər halda mötərizə tələb olunur.

Əgər funksiya heç bir dəyər qaytarmırsa, o, tip funksiyası kimi elan edilməlidir boş (boş).

Bu halda operator qayıtmaq təyin olunmaya bilər.

Bir funksiyanın bir neçə operatoru ola bilər. qayıtmaq , lakin heç biri olmaya bilər. Belə hallarda çağırış proqramına qayıdış funksiyada sonuncu ifadənin icrasından sonra baş verir.

İki tam dəyişənin ən kiçik qiymətini təyin edən funksiyaya misal:

int min (int x, int y)

qayıtmaq (x

Bütün dəyər qaytaran funksiyalar C ifadələrinin sağ tərəfində istifadə edilməlidir, əks halda qaytarılan nəticə itiriləcək.

Əgər funksiyanın parametrlər siyahısı yoxdursa, o zaman belə funksiyanı elan edərkən mötərizədə void açar sözünü göstərmək də məqsədəuyğundur. Misal üçün, əsas boşluq (boş).

The funksiyası açar söz ifadə daxilində funksiyanı təyin etmək üçün istifadə edilə bilər.

Bu interaktiv nümunə üçün mənbə GitHub deposunda saxlanılır. Əgər siz interaktiv nümunələr layihəsinə töhfə vermək istəyirsinizsə, lütfən, https://github.com/mdn/interactive-examples klonlayın və bizə sorğu göndərin.

Sintaksis

var myFunction = funksiya[ ad]([param1[, param2[, ..., paramN]]]) { bəyanatlar };

Parametrlər

ad Funksiya adı. Buraxıla bilər, bu halda funksiyadır anonim. Ad yalnız funksiya orqanına aiddir. paramN Funksiyaya ötürüləcək arqumentin adı. ifadələr Funksiyanın əsas hissəsini təşkil edən ifadələr.

Təsvir

Funksiya ifadəsi funksiya ifadəsinə çox bənzəyir və demək olar ki, eyni sintaksisə malikdir (ətraflı məlumat üçün funksiya ifadəsinə baxın). Funksiya ifadəsi ilə funksiya ifadəsi arasındakı əsas fərq budur funksiya adı, yaratmaq üçün funksiya ifadələrində buraxıla bilən anonim funksiyaları. Funksiya ifadəsi təyin olunan kimi işə salınan IIFE (Dərhal Çağırılan Funksiya İfadəsi) kimi istifadə edilə bilər. Əlavə məlumat üçün funksiyalar haqqında bölməyə də baxın.

funksiya ifadəsinin qaldırılması

JavaScript-də funksiya ifadələri funksiya bəyannamələrindən fərqli olaraq qaldırılmır. Funksiya ifadələrini təyin etməmişdən əvvəl istifadə edə bilməzsiniz:

Console.log(notHoisted) // qeyri-müəyyən //dəyişən adı qaldırılsa da, tərif deyil, ona görə də qeyri-müəyyəndir. notHoisted(); // TypeError: notHoisted funksiya deyil var notHoisted = function() ( console.log("bar"); );

adlı funksiya ifadəsi

Funksiya gövdəsi daxilində cari funksiyaya istinad etmək istəyirsinizsə, adlandırılmış funksiya ifadəsi yaratmalısınız. Bu ad sonra yalnız funksiya orqanına (əhatə dairəsi) yerli olur . Bu, həmçinin qeyri-standart arguments.callee xassəsindən istifadə etməkdən yayınır.

Var math = ( "factit": funksiya faktorial(n) ( console.log(n) əgər (n)<= 1) { return 1; } return n * factorial(n - 1); } }; math.factit(3) //3;2;1;

Funksiya ifadəsinin təyin olunduğu dəyişənin ad xassəsi olacaq. Fərqli dəyişənə təyin edildikdə ad dəyişmir. Funksiya adı buraxılıbsa, o, dəyişənin adı olacaq (qeyri-müəyyən ad). Əgər funksiya adı varsa, o, funksiya adı olacaq (açıq ad). Bu, ox funksiyalarına da aiddir (oxların adı yoxdur, ona görə də dəyişənə yalnız gizli ad verə bilərsiniz).

Var foo = function() () foo.name // "foo" var foo2 = foo foo2.name // "foo" var bar = funksiya baz() () bar.name // "baz" console.log(foo) ===foo2); // true console.log(typeof baz); // müəyyən edilməmiş console.log(bar === baz); // false (baz == müəyyən edilmədiyi üçün xətalar)

Nümunələr

Aşağıdakı nümunə adsız funksiyanı təyin edir və onu x-ə təyin edir. Funksiya öz arqumentinin kvadratını qaytarır:

Var x = funksiya(y) ( y * y; qaytarın); button.addEventListener("klik", funksiya(hadisə) ( console.log("düymə basıldı!") ))

Spesifikasiyalar

Spesifikasiya Vəziyyət Şərh
ECMAScript Ən Son Qaralama (ECMA-262)
Qaralama
ECMAScript 2015 (6-cı Nəşr, ECMA-262)
Həmin spesifikasiyada "Funksiya tərifləri"nin tərifi.
standart
ECMAScript 5.1 (ECMA-262)
standart
ECMAScript 3-cü Buraxılış (ECMA-262)
Həmin spesifikasiyada "Funksiya tərifi"nin tərifi.
standart ilkin tərif. JavaScript 1.5-də həyata keçirilir.

Brauzer uyğunluğu

Bu səhifədəki uyğunluq cədvəli strukturlaşdırılmış məlumatlardan yaradılıb. Məlumatlara töhfə vermək istəyirsinizsə, lütfən, https://github.com/mdn/browser-compat-data ünvanına daxil olun və bizə sorğu göndərin.

GitHub-da uyğunluq məlumatlarını yeniləyin

İş masasıMobilserver
ChromekənarFirefoxinternet ExplorerOperasafariandroid veb görünüşüAndroid üçün ChromeAndroid üçün FirefoxAndroid üçün operaiOS-da SafariSamsung İnternetNode.js
funksiyasıChrome Tam dəstək BəliEdge Tam dəstək 12Firefox Tam dəstək 1IE Tam dəstək BəliOpera Tam dəstək BəliSafari Tam dəstək BəliWebView Android Tam dəstək BəliChrome Android Tam dəstək BəliFirefox Android Tam dəstək 4Opera Android Tam dəstək BəliSafari iOS Tam dəstək BəliSamsung İnternet Android Tam dəstək Bəlinodejs Tam dəstək Bəli
parametrlərdə arxadakı vergülChrome Tam dəstək 58Kənar Dəstək yoxdur NoFirefox Tam dəstək 52IE Dəstək yoxdur NoOpera Tam dəstək 45Safari Dəstək yoxdurWebView Android Tam dəstək 58Chrome Android Tam dəstək 58Firefox Android Tam dəstək 52Opera Android Tam dəstək 43Safari iOS Dəstək yoxdurSamsung İnternet Android Tam dəstək 7.0nodejs Tam dəstək 8.0.0

Əfsanə

Tam dəstək Tam dəstək dəstək yoxdur dəstək yoxdur

Bir funksiya yaratmağın başqa bir yolunu nəzərdən keçirəcəyimiz məqalə - tərif ifadəsi vasitəsilə. Bundan əlavə, biz funksiyanı elan etməyin bu üsulu ilə ənənəvi üsul arasındakı fərqi təhlil edəcəyik.

Tərif ifadəsi ilə funksiyanın yaradılması

JavaScript-də siz yalnız ənənəvi üsuldan (bəyannamələr - Ənənəvi Bəyannamələr) deyil, həm də tərif ifadəsi (Tərif ifadələri) vasitəsilə funksiya yarada bilərsiniz. Funksiyanı təyin etməyin bu üsulu bəzi mənbələrdə funksiya hərfi adlanır.

Tərif İfadələrinin arxasında duran əsas fikir funksiya təsvirinin bəzi dəyişənin və ya ifadənin dəyəri kimi istifadə edilməsidir.

Məsələn, cəmi dəyişəni konsolda parametr kimi göstərilən 2 ədədin cəmini göstərəcək funksiyanın təsvirini ehtiva edəcək.

Varsum = funksiya(num1,num2) ( qaytarın console.log(num1+num2); );

Tərif ifadəsi əsasında yaradılmış funksiya çağırışı dəyişənin adı ilə həyata keçirilir.

//məsələn, sum dəyişəninin tərkibində olan funksiyanı çağıraq və ona 2 arqument ötürək. cəmi(7,4);

Diqqət: Funksiya adı tərif ifadəsində göstərilməyib. Adsız elan edilən funksiya anonim adlanır.

Nəzərə alın ki, JavaScript tərif ifadəsi kimi yaradılmış funksiyanın sintaksisinə ada sahib olmağa imkan verir. Ancaq bu, yalnız öz bədənində həll edilməli olduqda məna kəsb edir. Məsələn, rekursiv funksiyaları yazarkən. Bu imkan başqa bir tətbiq vermir, çünki bu şəkildə müəyyən edilmiş funksiyaya onun hüdudlarından kənarda adla istinad etmək mümkün deyil.

Məsələn, rəqəm parametri kimi göstərilən faktorialı hesablamaq üçün funksiya yaradaq:

Var faktorial = funksiya faktı (num) ( əgər (num

Bu kod funksiyanı təyin edir və ona istinadı faktor dəyişəndə ​​saxlayır. Bu funksiya daxilində funksiyanı çağırmaq üçün fakt adından istifadə edin. Nəzərə alın ki, siz onun gövdəsindən kənar funksiyaya adı faktı ilə istinad edə bilməzsiniz, bunun üçün faktorial dəyişəndən istifadə etməlisiniz.

Ancaq bu vəziyyətdə, bir ad olmadan edə bilərsiniz, çünki. JavaScript sizə arqumentlər obyektinin callee xassəsindən istifadə edərək funksiyanı öz daxilində çağırmağa imkan verir.

Var faktorial = funksiya (num) ( əgər (num

JavaScript - Özünü çağıran funksiya

Tərif ifadəsi ilə müəyyən edilmiş funksiya dərhal çağırıla bilər. Bunun üçün funksiyanın gövdəsindən sonra mötərizələr qoymalı və lazım gələrsə onlarda arqumentlər göstərməlisiniz.

Məsələn, 7 və 4 parametr dəyərləri ilə dərhal cəm funksiyasını çağıraq.

Varsum = funksiya(num1,num2) ( qaytarın console.log(num1+num2); )(7,4);

Bir funksiyanın dərhal çağırılması prosesinə bəzən funksiyanın başlanğıclaşdırılması və ya funksiyanın instantiasiyası deyilir.

Funksiya tərifi ifadəsi onu bir dəfə və dərhal yerinə yetirmək lazım olduqda çox tez-tez istifadə olunur. Bunu etmək üçün, hətta bir dəyişən istifadə edə bilməzsiniz, ancaq dərhal hesablanmış bir ifadə yazın, yəni. anonim funksiya tərifini mötərizədə sarın.

(funksiya(num1,num2) ( return console.log(num1+num2); )(7,4));

Funksiya bəyannaməsi və funksiya ifadəsi arasındakı fərqlər

Funksiya Bəyannaməsi və Funksiya İfadəsi arasındakı əsas fərqlər aşağıdakı cədvəldə təqdim olunur:

Funksiya Bəyannaməsi Funksiya ifadəsi
Brauzer (JavaScript tərcüməçisi) funksiya əsas kod axınında yerləşirsə (hər hansı ifadənin bir hissəsi deyil) onu Funksiya Bəyannaməsi hesab edir. Brauzer funksiyanı ifadə daxilində yerləşdirdiyi halda Funksiya İfadəsi kimi tapır.
Funksiya bu şəkildə elan edildikdə, ona daxil olan dəyişən avtomatik olaraq yaradılır. kvadrat(a) funksiyası (a*a; qaytarın; ) // funksiya çağırışı console.log(kvadrat(5)); Funksiyaya zəng etmək üçün dəyişən yaratmaq və bu funksiyaya istinadı onda saxlamaq lazımdır. var kvadrat = function(a) ( a*a; qaytarın; ) // funksiyanın çağırılması console.log(square(5));
Kod icra edilməzdən əvvəl işə salınır (müvafiq miqyasda). Bu hərəkətə qaldırma və ya qaldırma da deyilir. Belə funksiyalar elan edilməzdən əvvəl çağırıla bilər. // funksiya elan edilməmişdən əvvəl çağırın console.log(square(7)); kvadrat(a) funksiyası (a*a; qaytarın) Funksiya ifadələri elan edilməmişdən əvvəl istifadə edilə bilməz. Yalnız dəyişənin özü qaldırılır. // funksiyanı çağırarkən xəta console.log(square(7)); var kvadrat = funksiya(a) ( a*a; qaytarın)

Bu vəziyyətdə aşağıdakılar baş verir:

Varsquare; console.log(kvadrat(7)); // lakin bu nöqtədə kvadrat qeyri-müəyyəndir = funksiya(a) ( a*a; qaytarın)

Use strict istifadə edərkən, Funksiya Bəyannaməsi kimi elan edilmiş funksiya yalnız elan olunduğu blokda görünəcək. "ciddi istifadə edin"; əgər (doğrudur) (cəmi(a,b,c) funksiyası (a+b+c qaytarın; ) console.log(sum(10,20,10)); ) // sum console.log( funksiyasına daxil olma xətası cəmi (4,5,4)); Funksiya Bəyannaməsindən fərqli olaraq, funksiyaya onun yaradıldığı blokdan kənarda daxil olmaq olar: "use strict"; əgər (doğru) (var sum = funksiya (a,b,c) ( a+b+c; qaytarın; ) console.log(sum(10,20,10)); ) // cəm funksiyası konsoluna giriş imkanı var .log (cəm(4,5,4));
Funksiya Bəyannaməsi kimi elan edilmiş funksiya dərhal çağırıla bilməz.
Bunu etmək üçün funksiyanı ifadənin bir hissəsi etmək lazımdır, məsələn, mötərizələrə sarın. Bundan sonra funksiya ifadənin (Function Expression) bir hissəsi hesab olunacaq və onu dərhal çağırmaq olar.
Məsələn: var sum = (funksiya cəmi(a,b,c) ( qaytarmaq a+b+c; ))(5,6,7); console.log(typeofsum); // nömrə konsolu.log(sum); // nömrə
Funksiya İfadəsi kimi elan edilmiş funksiya dərhal çağırıla bilər. var cəmi = funksiya (a,b,c) ( a+b+c qaytarmaq; )(5,6,7); console.log(typeofsum); // nömrə konsolu.log(sum); // sayı Bu halda, sum dəyişəni (bu halda) artıq funksiyaya istinadı deyil, onun nəticəsini (bu nümunədə ədədi) ehtiva edir.

Nəticə: Funksiyanın tərif ifadəsi ilə elan edilməsi funksiyanın dəyişən kimi istifadə edilməsinə imkan verir. JavaScript dilinin bu xüsusiyyəti çox maraqlıdır və daha çevik skriptlər yaratmağa imkan verir.

Əvvəlki bölmələrdə proqramın qurulduğu elementar "kərpicləri" (operatorlar və ifadələr) nəzərdən keçirdik. İlkin proqramlaşdırma dillərində, məsələn, Basic-in ilk versiyalarında bu, onun sonu idi. Proqram ifadələr ardıcıllığıdır, vəssalam. Nə qədər ki, proqramlar kiçikdir, bu yanaşma olduqca işləkdir. Proqramın 10 ifadəsi varsa, əlavə struktura ehtiyac yoxdur. Ancaq proqramda 10.000 ifadə və ya 10.000.000 ifadə varsa (və belə proqramlar var və işləyirlər), onda əlavə bir quruluş təqdim etmədən edə bilməzsiniz.

VBA aşağıdakı proqram strukturunu dəstəkləyir. İyerarxiyanın yuxarı səviyyəsində tətbiqetmə, ondan sonra həmin tətbiqin faktiki sənədləri ilə əlaqəli layihələr, üçüncü səviyyədə modullar (tətbiq modulları, istifadəçi modulları, sinif modulları, forma modulları və keçid modulları) yerləşir. Və sonuncu səviyyədə bu modulların prosedurları və funksiyaları var.

Bu proqram strukturlaşdırılması struktur və modul proqramlaşdırmanın prinsiplərinə tam cavab verir. Bu bölmədə modul səviyyəsində işləməyi ətraflı müzakirə edəcəyik, tətbiqlərlə işləmək və layihələrdən bəhs edəcəyik 20.6 "Tətbiq Redaktoru üçün Visual Basic" bölməsinə baxın.

Belə ki, modul - müstəqil yayımlana biləcək şəkildə hazırlanmış proqramın bir hissəsidir. Modul, öz növbəsində, iki hissədən ibarətdir: elanlar bölməsi(Bəyannamələr)prosedurlar və funksiyalar bölməsi. Fəsildə Bəyannamələr qlobal dəyişənləri, istifadəçi tərəfindən təyin olunan tipləri və sadalanan növləri təsvir edir. Növbəti bölmə prosedurları və funksiyaları təsvir edir. Prosedur icra edilə bilən ən kiçik semantik tam proqram konstruksiyasıdır. Nəhayət, operatorlar məhz belə icra olunmur və yazılmır, onlar prosedurların və funksiyaların təsvirindədirlər.

Görmə sahəsi - bu, proqramın dəyişənin adının göründüyü sahəsidir, yəni onun dəyərinə daxil olmaq olar.

Görmə qabiliyyətinin üç səviyyəsi və bəyan etməyin beş yolu var:

Prosedur (əhatə dairəsi - yalnız dəyişənin elan olunduğu prosedur).

  • Dim ifadəsi prosedur orqanında və prosedurun istənilən yerində dəyişəni elan edir, lakin ondan istifadə edən ifadələrdən əvvəl. Bu dəyişənin ömrü prosedurun əhatə dairəsidir, yəni bu prosedura daxil olan zaman dəyişən üçün yaddaş ayrılır və o işə salınır, sonra prosedurun icrası zamanı dəyişənin dəyəri prosedurdan çıxdıqdan sonra dəyişə bilər. , ayrılmış yaddaş boşaldılır və müvafiq olaraq dəyişənin dəyəri itirilir.
  • Statik ifadə Dim ifadəsinin antaqonistidir, statik dəyişən elan edir. Fərq ondadır ki, prosedurdan çıxdıqda yaddaş statik dəyişəndən götürülmür, müvəqqəti olaraq (əhatə dairəsinə görə) əlçatmaz olur və müvafiq olaraq onun dəyəri saxlanılır, prosedur yenidən çağırıldıqda istifadə oluna bilər. .

Modul (əhatə dairəsi - dəyişənin elan olunduğu modulun bütün prosedurları):

  • Private bəyanatı bəyannamə bölməsində dəyişən elan edir Bəyannamələr(xarici modul prosedurları).
  • Dim operatoru tamamilə (bu halda) Private operatoruna bənzəyir.

Tətbiq (əhatə dairəsi - aktiv tətbiqin bütün modullarının bütün prosedurları):

  • İctimai bəyanat bəyannamə bölməsində dəyişən elan edir bəyannamələr.

Bütün VBA istifadəçi tərəfindən müəyyən edilmiş elementlər kimi prosedurlar bəyannamə tələb edir. Prosedur bəyannaməsi aşağıdakı sintaksisə malikdir:

Alt ProsedurAdı ([ Arqument Siyahısı ])

[ bəyanat bloku1 ]

[ Bəyanat bloku2 ] Son Alt

Private açar sözü prosedur üçün növbəti əhatə dairəsini - yalnız elan olunduğu modulu müəyyən edir. Yəni yalnız eyni modulun prosedurları onu çağıra bilər. Public açar sözü isə proseduru layihənin bütün modulları üçün əlçatan edir. Varsayılan olaraq, prosedur açıqdır, yəni İctimai statusa malikdir. Friend açar sözünün istifadəsinə gəlincə, bu barədə bir qədər sonra VBA dərsləri haqqında danışarkən danışacağıq.

Bəyannamə ifadələrindən sonra bütün yerli dəyişənləri statik edən isteğe bağlı statik açar söz gəlir. Bu ifadə prosedur-dəyişənlərin gövdəsində təsvir olunan dəyişənlərin hər birinin statik elan ediləcəyi faktına bərabərdir.

Prosedur Adı bütün adlandırma konvensiyalarına cavab verən prosedur identifikatorudur.

Addan sonra tələb olunan mötərizələr, lakin isteğe bağlı Arqument-Siyahısı gəlir. Gəlin vahid arqument bəyannaməsinə daha yaxından nəzər salaq; daha çox varsa, onlar sadəcə vergüllə ayrılır.

Arqument-Adı [()] [= Defolt-Dəyər]

Könüllü açar sözü arqumentin isteğe bağlı olduğunu və proseduru çağırarkən buraxıla biləcəyini bildirir. Varsayılan olaraq, arqument tələb olunur. Bütün isteğe bağlı arqumentlər tələb olunanlardan sonra gəlməlidir. Təbii ki, isteğe bağlı parametr dəyərDefault proseduru çağırarkən verilmədiyi halda opsional arqumentin qiymətidir. Əgər konstruksiya ParamArray açar sözünü ehtiva edirsə, onda Optional açar sözü istifadə edilə bilməz.

Faktiki parametrlər olaraq, prosedur yalnız sabitlərin dəyərlərini deyil, həm də dəyişənlərin dəyərlərini qəbul edə bilər. Dəyişənləri prosedura parametr kimi ötürərkən iki üsuldan biri istifadə edilə bilər: ByVal (dəyərlə) və ByRef (istinadla).

Bu iki üsul arasındakı fərqi başa düşmək üçün parametrlərin "içəridən" ötürülməsi üçün saxlama və mexanizm nəzərə alınmalıdır. Belə ki, istənilən tip dəyişəni elan edərkən kompüterin yaddaşında dəyişənin qiymətinin saxlanacağı sahə ayrılır. Bu sahənin ölçüsü, əlbəttə ki, bu dəyişənin növündən asılıdır. İndi dəyişənin kompüter daxilində necə işlədiyini bildiyimiz üçün onun prosedura parametr kimi ötürülməsini nəzərdən keçirək.

Əgər dəyişən prosedura istinadla ötürülürsə (yəni adından əvvəl ByRef açar sözündən istifadə etməklə), onda həmin dəyişənin yaddaşdakı ünvanı prosedura ötürüləcək. Bu halda, prosedurun formal arqumenti və keçmiş faktiki parametr müəyyən edilir.

Beləliklə, çağırılan prosedur formal parametrin qiymətini dəyişdirərək dəyişənin qiymətini dəyişir.

Əgər dəyişən dəyər üzrə ötürülürsə (yəni öz adından əvvəl Byval açar sözündən istifadə etməklə), onda kompilyator bu dəyişənin müvəqqəti surətini yaradır və məhz bu kopya dəyişənin ünvanı prosedura ötürülür. Beləliklə, çağırılan prosedur, formal parametrin qiymətini dəyişdirərək, prosedur başa çatdıqdan sonra məhv ediləcək surət dəyişəninin (lakin dəyişənin özünü deyil) qiymətini dəyişir. Varsayılan olaraq, dəyişənlər VBA-da istinadla ötürülür.

Dəyişənlərin prosedura necə ötürülə biləcəyini nəzərdən keçirdikdən sonra onun konstruksiyasının daha ətraflı nəzərdən keçirilməsinə qayıdaq. Növbəti parametr paramArray yalnız arqumentlər siyahısında sonuncu arqumentdən əvvəl görünə bilər ki, bu da onun variant tipli elementlərin isteğe bağlı massivi olduğunu göstərir.

arqument adı - bu prosedur orqanında arqumenti təmsil edən adlandırma konvensiyasının identifikatorudur. Parametr məlumat növü ya daxili məlumat növü, ya da istifadəçi tərəfindən müəyyən edilmiş tipdir. Defolt typeDanky Variantdır.

Proseduru təsvir etdikdən sonra BlockOperators1(ümumiyyətlə adlanır prosedur orqanı) burada prosedurun "arqumentlərinin qiymətlərindən istifadə edilə bilər. Əgər prosedurun ifadələrinin icrası zamanı Exit Sub (prosedurdan çıxmaq) ifadəsinə rast gəlinirsə, o zaman prosedurun icrası dayandırılır və nəzarət edilir. prosedur çağırışından sonra bəyanata köçürülür.

Funksiya prosedurdan onunla fərqlənir ki, o, ifadələri yerinə yetirməklə yanaşı, dəyəri qaytarır. Funksiya bəyannaməsinin sintaksisi prosedurdan bir qədər fərqlidir:

Funksiya Funksiya Adı [(ArqumentList)]

[ifadə bloku1]

[Funksiya Adı = İfadə]

[ifadə bloku2]

[FunctionName = İfadə] Son Funksiya

Birincisi, alt açar söz Function olaraq dəyişdirildi. İkincisi, arqumentləri elan etdikdən sonra funksiyanın qaytardığı dəyərin növünü təyin etməlisiniz. Üçüncüsü, funksiyanın gövdəsində elan edilmiş tipə malik olan hansısa dəyərin funksiyasının adına təyinat var. Əlbəttə ki, belə bir tapşırıq isteğe bağlıdır, lakin sonra funksiyanız prosedur kimi görünəcək və funksiyanın nəticəsi müvafiq tip üçün müəyyən edilmiş standart dəyər olacaqdır. Nəhayət, funksiyadan çıxmaq üçün Exit Sub açar sözünün əvəzinə Exit Function açar sözündən istifadə olunur.

Bir sıra sorğuların işə salınması prosedurunu təsvir etmək üçün nəşriyyat və mağazalar haqqında bir nümunədən istifadə edək. Beləliklə, prosedura ötürülən massiv arqumentimiz var və prosedur onu standart inputBox funksiyasından istifadə edərək inisiallaşdırır. Massivin yuxarı və aşağı sərhədlərini təyin etmək üçün standart LBound və uBound funksiyalarından istifadə olunur.

Funksiya vəziyyətində arqumentlər kimi sorğular massivi və stokda olan kitabların sayı daxil edilir və bütün mağazaların tələbləri təmin olunarsa, boolean True, əks halda isə False qaytarılır. Yeri gəlmişkən, biz kitab arqumentinin sayını isteğe bağlı edəcəyik, standart olaraq 5000-ə bərabərdir.

Proqram 20.14. Prosedurların və funksiyaların elan edilməsi

Public Sub InitBookShops(arr() Tam ədəd kimi)

Dim i, str For i = LBound (arr) To UBound (arr)

str = "Mağaza # üçün sifarişi daxil edin" & i arr(i) = InputBox(str) Next i End Sub

İctimai Funksiya Satışı(arr() Tam ədəd kimi, _ "

İsteğe bağlı numOfBooks As Integer = 5000) Boolean kimi

Hər bir element üçün arr

sumOfBooks = sumOfBooks + element Next If sumOfBooks< numOfBooks Then

Satış qabiliyyəti = Doğrudur

SaleAbility = Son Funksiyası Əgər Yalan Sondur

Şərh

SaleAbility funksiyasının gövdəsində qəsdən irrasionallıq var. Son if ifadəsinin yerinə. . .Sonra. . .Əks halda siz ekvivalent, daha səmərəli tapşırıq bəyanatı yaza bilərsiniz və yazmalısınız SaleAbility = sumOfBooks< numOfBooks. Этим замечанием мы специально акцентируем внимание читателя на подобных мелких, но важных "хитростях" хорошего стиля программирования.

Yuxarıda təsvir edilən prosedur və funksiya bəyannamələrinə əlavə olaraq, VBA-da xüsusi bir prosedur növü mövcuddur. Bunlar sistem və ya istifadəçi tərəfindən çağırılan hadisəyə cavab vermək üçün prosedurlardır. (Bax: Fəsil 22 Tətbiqlərin İnkişafı). Məsələn, Word sənədləri üçün açıq və qapalı hadisələr, Excel iş kitabları üçün Saxlamadan əvvəl və Dozadan əvvəl müəyyən edilir, fərdi sinif obyektləri üçün başlatma və Bitirmə müəyyən edilir, dialoq qutusu düyməsini basmaq da hadisədir və s. İstifadəçi yarada bilər. bu cür hadisələrə cavab vermə proseduru. məsələn, "Əlvida, iş üçün təşəkkürlər!" mesajını göstərməyi xahiş edin. sənədi bağlayarkən.

Belə prosedurun sintaksisi adi bir prosedurun sintaksisi ilə eynidir, yalnız onun adı əvvəlcə hadisənin əlaqələndiriləcəyi obyekti, sonra alt xətt işarəsini (_) və sonra hadisənin faktiki adını göstərir.

Proqram 20.15. Hadisə reaksiyası proseduru

Şəxsi Alt Sənəd_Close()

MsgBox ("Əlvida, işiniz üçün təşəkkürlər!")

Şərh

Hadisəyə nəzarət proqram kodunu aşağıdakı ideya əsasında strukturlaşdırmaq üsuludur. Adlandırılmış hadisələrin bəzi əvvəlcədən təyin edilmiş dəsti var. Hadisələr açıq şəkildə obyektlərlə əlaqələndirilə bilər və onlar gizli şəkildə əlaqələndirilə və ya gizli obyektlərlə əlaqələndirilə bilər, sonuncu halda hadisələr adətən sistem hadisələri adlanır. Hadisələr baş verə bilər. Hadisənin baş verməsi sistemin vəziyyətinin müəyyən şəkildə dəyişdiyini nəzərdə tutur. Bir hadisə ilə əlaqəli bir prosedur ola bilər, buna hadisə cavabı deyilir. Hadisə baş verdikdə, reaksiya proseduru avtomatik olaraq çağırılır. Hadisələrin idarə edilməsini dəstəkləyən müasir proqramlaşdırma sistemlərində çoxlu sayda müxtəlif hadisələr təmin edilir, reaksiyaları proqramda müəyyən edilə bilər, məsələn: klaviaturada düyməni basmaq, siçan göstəricisini müəyyən bir sahədə vurmaq. ekran, daxili taymer vasitəsilə müəyyən edilmiş dəyərə çatması, verilmiş faylın açılması və s. run-time administrativ sistemində, yəni hadisə mexanizminin həyata keçirildiyi yerdə). Nəzarət proqrama yalnız reaksiya proseduru çağırışı şəklində daxil olur. Proqramın bu cür təşkili yüksək modulluq, şəffaflıq, balanslaşdırılmış struktur və digər faydalı xüsusiyyətləri təmin edir. Aydındır ki, hadisələri tətbiq əmrləri ilə əlaqələndirirsinizsə (adətən edildiyi kimi), o zaman hadisənin idarə edilməsi istifadəçi interfeysini həyata keçirmək üçün ən uyğundur.


Müasir proqramlaşdırma sistemləri daxili hadisələrin idarə edilməsi mexanizmləri ilə sıx inteqrasiya olunmuş idarəetmə adlanan əvvəlcədən qurulmuş komponentlərin zəngin və inkişaf edən kitabxanalarına malikdir. Hazır idarəetmə vasitələrinin istifadəsi rahat, məhsuldardır və əksər hallarda tövsiyə edilməlidir. Bu mövzu haqqında daha çox məlumat üçün Fəsil 22 Tətbiq İnkişafına baxın.

Təbii ki, prosedurları və funksiyaları elan etməklə yanaşı, onlardan istifadə edilməlidir - çağırılır. Bunun bir neçə yolu var və “bir neçə” çox zəif bir sözdür. VBA istifadəçiyə prosedur və funksiyaları çağırmaq üçün o qədər çevik sistem təqdim edir ki, o, necə düşünməli olur. proseduru çağırmağın yolları.

İlk, ən sadə zəng:

ProsedurAdı AktualParameterList

Prosedurun adı -bu sizin adlanan prosedurunuzdur vəsiyahıAktualPara - metr -çağırıldığı zaman prosedura ötürülən faktiki parametrlərin siyahısıdır. O, prosedur elan edildikdə göstərilən tələb olunan arqument siyahısına uyğun olmalıdır. Faktiki parametrlər, əgər birdən çox olarsa, vergüllə ayrılmış şəkildə qeyd olunur; onların sırası elan edilmiş arqumentlərə uyğun olmalıdır. Qeyd edək ki, belə bir proseduru çağırarkən, faktiki parametrlərin siyahısını mötərizədə əlavə etməyə ehtiyac yoxdur.

Siz həmçinin Zəng açar sözündən istifadə edərək prosedura zəng edə bilərsiniz: Zəng ProsedurAdı (FaktualParametrlərin Siyahısı)

Bu çağırış üsulu ilə bütün parametrlərin mahiyyəti eyni qalır. Fərq ondadır ki, faktiki parametrlərin siyahısı mötərizə içərisində olmalıdır.

Funksiya çağırışı prosedur çağırışından bir qədər fərqlidir. Əsas fərq ondan ibarətdir ki, siz funksiyanın hesablanmış dəyərini hansısa dəyişənə ötürə bilərsiniz, ona görə də funksiya çağırışı belə görünür:

Dəyişən Adı = Funksiya Adı (AktualParameterList)

Onların çağırışını göstərmək üçün yuxarıda elan edilmiş prosedur və funksiyaların nümunəsindən istifadə edək.

Proqram 20.16. Çağırış Prosedurları və Funksiyaları

Tutqun kitab mağazaları(1-dən 25-ə qədər) Məntiq kimi Tam ədəd Dim nəticə kimi

nəticə = Satış qabiliyyəti (kitab mağazası, 3000)

MsgBox(nəticə) Son Alt

Nəzərdən keçirilən çağırış üsullarında faktiki parametrlər prosedur və ya funksiya elan edilərkən formal arqumentlərlə eyni ardıcıllıqla düzülürdü. Bəzi hallarda, xüsusən də prosedurda çoxlu sayda isteğe bağlı arqumentlər olduqda, unikal VBA xüsusiyyətindən istifadə edə bilərsiniz - adlı arqumentlər. Belə bir çağırışla, faktiki parametrin dəyərinə əlavə olaraq, ad da göstərilir

verilmiş dəyərin uyğun olduğu formal arqument. Bunun üçün arqument adından sonra iki nöqtə və bərabər işarəsi, ardınca isə faktiki parametr gəlir. Bu, arqumentin faktiki parametrlə əlaqəsini görməyə imkan verən çox lazımlı hiylədir.

Proqram 20.17. Adlandırılmış Arqumentlərdən istifadə

Dim kitab mağazaları (1-dən 25-ə qədər) Tam ədəd kimi

Məntiqi kimi zəif nəticə

nəticə = Satış qabiliyyəti (arr:= kitab mağazaları, kitabların sayı:= 3000)

MsgBox(nəticə) Son Alt

Prosedur elanının sintaksisini təsvir edərkən ParamArray açar sözünü qısaca qeyd etdik, ona diqqət yetirməyin vaxtı gəldi. Prosedura naməlum sayda faktiki parametrləri ötürmək imkanı yenə bir çox digər proqramlaşdırma dillərinə xasdır.

Məsələn, ParamArray parametrindən istifadə edərək sorğuların ümumi sayını hesablamaq üçün prosedur yaradacağıq. Testlər prosedurunda bu proseduru çağırarkən, siz iddialar massivinin istənilən sayda faktiki parametrlərini təyin edə bilərsiniz.

Proqram 20.18. ParamArray Parametrindən istifadə

Sub FullSum(ParamArray arr() Variant kimi)

Dim Cəmi Tam Ədədi

i = LBound(arr) üçün UBound(arr) cəmi = sum + arr(i)

MsgBox (cəm) Son Sub

TamSum 100, 2000, 350, 450 Son Sub

Prosedurları və ya funksiyaları çağırmağın başqa bir yolunu nəzərdən keçirin - rekursiv çağırış, yəni prosedurun öz bədənindən çağırıldığı çağırış. Rekursiv funksiyanın standart nümunəsi faktorial hesablamadır.

Proqram 20.19. Rekursiv funksiya çağırışı

Variant kimi fctrl(n Tam Ədədi) funksiyası

Əgər(n<= 1) Then fctrl = 1

fctrl = n * fctrlfn - 1) End If End Funksiya

MsgBox fctrl(20) Son Alt

Bir qayda olaraq, rekursiv zənglərdən sui-istifadə edilməməlidir, çünki rekursiv zənglər kompüterin yaddaşını tez doldurur və onları emal etmək üçün daha çox vaxt tələb olunur. Bizim vəziyyətimizdə, adi bir döngə ilə əvəz etməklə rekursiv çağırışdan istifadə etməkdən qaça bilərik. Baxmayaraq ki, əlbəttə ki, rekursiv metodların istifadəsi işi nəzərəçarpacaq dərəcədə sürətləndirdiyi vəziyyətlər var, məsələn, ağaca bənzər məlumat strukturları ilə işləyərkən.

Nəhayət, parametrlərin istinad və dəyər üzrə ötürülməsi arasındakı fərqi göstərən nümunəyə baxacağıq, burada iki prosedur göstərilir: RefVal və MainCalc. RefVal köməkçi proseduru fərqli təsvir olunan üç formal arqumentdən istifadə edir. Daha sonra bu prosedurun gövdəsində onların hər biri bir artır və sonra dəyərləri göstərilir. Əsas prosedur MainCalc a, b və c dəyişənlərinin qiymətlərini təyin edir və sonra onları RefVal proseduruna parametr kimi ötürür. Bu halda, birinci parametr istinadla (standart olaraq), ikincisi - dəyərlə, üçüncüsü isə yenidən istinadla ötürülür. RefVal proseduru qayıtdıqdan sonra əsas prosedur parametrlər kimi ötürülən üç dəyişənin dəyərlərini də göstərir. Ekranda cəmi altı dəyər göstərilir. Birincisi, bunlar 11, 21 və 31 rəqəmləridir (bütün qəbul edilmiş dəyərlər 1-ə qədər artır və RefVal proseduru ilə göstərilir). Sonra AND, 20 və 31 ədədləri var (bu dəyərlər MainCalc proseduru ilə göstərilir və istinadla ötürülən dəyişənlər artıb, lakin dəyərlə ötürülən dəyişən artmayıb).

Proqram 20.20. ByRef və ByVal arasındakı fərq

Sub RefVal(x, ByVal y, ByRef z)

MsgBox (z) Son Alt

Sub MainCalc 0 a = 10 b = 20 s = 30 Zəng RefVal(a, b, c)

MsgBox(a) MsgBox(b) MsgBox(c) End Sub

Beləliklə, biz istifadəçi tərəfindən müəyyən edilmiş prosedur və funksiyalarla işləməyi nəzərdən keçirdik, lakin bu imkandan əlavə, proqramçıya standart əməliyyatların həyata keçirilməsi haqqında düşünməməsinə imkan verən müxtəlif daxili prosedurların və funksiyaların geniş spektri mövcuddur, məsələn: sətirləri müqayisə etmək və ya bəzi ədədin sinusunu götürmək. Təəssüf ki, kitabımızın əhatə dairəsi daxili prosedurların və funksiyaların kiçik bir hissəsini belə təsvir etməyə imkan vermir (və bu faydasızdır), lakin onların tam siyahısını və təsvirini həmişə daxili Outlook yardımında tapa bilərsiniz. .

JavaScript-də ifadələr birləşmələrdir operandlaroperatorlar.

Əməliyyatlar ifadələrdə prioritet qiymətə uyğun olaraq ardıcıl icra olunur (prioritet dəyəri nə qədər yüksəkdirsə, bir o qədər yüksəkdir). Qaytarılan nəticə həmişə emal olunan məlumat növü ilə eyni tipdə olmur. Məsələn, müqayisə əməliyyatları müxtəlif tipli operandları əhatə edir, lakin qaytarılan nəticə həmişə boolean tipli olacaqdır.

düyü. 1. JavaScript-də ifadənin strukturu

operandlar JavaScript skripti ilə işlənmiş məlumatdır. Operandlar həm sadə verilənlər tipləri, həm mürəkkəb, həm də digər ifadələr ola bilər.

Operatorlar verilənlər üzərində müxtəlif əməliyyatlar yerinə yetirən dilin simvollarıdır. Operatorlar durğu işarələrindən və ya açar sözlərdən istifadə etməklə yazıla bilər.

Operandların sayından asılı olaraq aşağıdakı operator növləri fərqləndirilir:
unar- əməliyyatda bir operand iştirak edir;
ikili— əməliyyatda iki operand iştirak edir;
üçlü— üç operand birləşdirir.

Ən sadə ifadə forması hərfi— özünü qiymətləndirən bir şey, məsələn, 100 rəqəmi, "Salam dünya" sətri. Dəyişən həm də ifadə ola bilər, çünki o, ona təyin edilmiş dəyəri qiymətləndirir.

JavaScript-də ifadələr və operatorlar

1. Arifmetik operatorlar

Arifmetik operatorlar riyazi əməliyyatları yerinə yetirmək üçün nəzərdə tutulmuşdur, onlar rəqəmli operandlarda (və ya ədədi dəyərləri saxlayan dəyişənlərdə) işləyir və nəticədə ədədi dəyəri qaytarır.

Operandlardan biri sətirdirsə, JavaScript tərcüməçisi onu rəqəmsal tipə çevirməyə çalışacaq və sonra müvafiq əməliyyatı yerinə yetirəcək. Növün çevrilməsi uğursuz olarsa, nəticə NaN olacaq (rəqəm deyil).

Cədvəl 1. Arifmetik operatorlar
Operator/Əməliyyat Təsvir Prioritet
+ Əlavə Rəqəmsal operandlar əlavə edir. Operandlardan biri sətirdirsə, ifadənin nəticəsi sətirdir. 12
- Çıxarma Birincidən ikinci operandı çıxarır. 12
- Unar minus Müsbət ədədi mənfi ədədə və əksinə çevirir. 14
* Vurma İki operandı çoxaldır. 13
/ Bölmə Birinci operandı ikinciyə bölür. Bölmənin nəticəsi ya tam, ya da üzən nöqtəli ədəd ola bilər. 13
% Modulo (bölmənin qalan hissəsi) Birinci operandın ikinciyə tam bölünməsinin qalığını hesablayır. Həm tam ədədlərə, həm də üzən nöqtəli ədədlərə aiddir. 13
var x = 5, y = 8, z; z = x + y // 13 qaytarır z = x - y; // qaytarır -3 z = - y; // qaytarır -8 z = x * y; // 40 z = x / y qaytarır; // 0,625 z = y % x qaytarır; // qayıt 3

2. Təyinat operatorları

Təyinat operatorları dəyişənlərə qiymətlər təyin etmək üçün istifadə olunur. Birləşdirilmiş operatorlar ilkin və sonrakı dəyəri bir dəyişəndə ​​saxlamağa imkan verir.

var a = 5; // a dəyişəninə 5 ədədi dəyəri təyin edin var b = "hellow"; // sətir sətrini b dəyişənində saxla var m = n = z = 10; // dəyişənlərə m, n, z ədədi qiymət təyin edin 10 x += 10; // x = x + 10-a ekvivalent; x -= 10; // x-ə ekvivalent = x - 10; x *= 10; // x = x * 10-a ekvivalent; x /= 10; // x = x / 10-a ekvivalent; x%= 10; // x-ə ekvivalent = x % 10;

3. Artırma və azaltma operatorları

Əməliyyatlar artım və azalma unardır və operandın dəyərini bir artırır və azaldır. Operand dəyişən, massiv elementi, obyekt xassəsi ola bilər. Çox vaxt bu cür əməliyyatlar bir döngədə sayğacın artırılması üçün istifadə olunur.

var x = y = m = n = 5, z, s, k, l; z = ++x * 2; /* hesablamalar nəticəsində z = 12, x = 6 dəyərini qaytaracaq, yəni. x dəyəri əvvəlcə 1 artır, sonra vurma əməliyyatı yerinə yetirilir */ s = y++ * 2; /* hesablamalar nəticəsində s = 10, y = 6 dəyərini qaytaracaq, yəni. əvvəlcə vurma əməliyyatı yerinə yetirilir, sonra isə 1 artırılmış dəyər y */ k = --m * 2 dəyişənində saxlanılır; // k = 8 dəyərini qaytaracaq, m = 4 l = n-- * 2; // l = 10, n = 4 dəyərini qaytaracaq

4. Müqayisə operatorları

Müqayisə operatorları operandları uyğunlaşdırmaq üçün istifadə olunur, ifadənin nəticəsi iki dəyərdən biri ola bilər - doğru və ya yanlış . Operandlar təkcə rəqəmlər deyil, həm də sətirlər, booleanlar və obyektlər ola bilər. Bununla belə, müqayisə yalnız rəqəmlər və sətirlər üzərində aparıla bilər, beləliklə, rəqəmlər və ya sətirlər olmayan operandlar çevrilir.

Hər iki operand uğurla rəqəmlərə və ya sətirlərə çevrilə bilmirsə, operatorlar həmişə false qaytarır.

Hər iki operand sətirlər/rəqəmlərdirsə və ya sətirlərə/rəqəmlərə çevrilə bilirsə, onlar sətirlər/rəqəmlər kimi müqayisə olunacaqlar.

Əgər operandlardan biri sətirdirsə/sətirə çevirirsə, digəri isə nömrədirsə/rəqəmə çevirirsə, operator sətri nömrəyə çevirməyə və rəqəmsal müqayisə aparmağa çalışacaq. Əgər sətir ədəd deyilsə, o, NaN-ə çevrilir və müqayisə false olaraq qiymətləndirilir.

Çox vaxt proqramlarda filiallar təşkil edərkən müqayisə əməliyyatlarından istifadə olunur.

Cədvəl 4. Müqayisə operatorları
Operator/Əməliyyat Təsvir Prioritet
== Bərabərlik Növə çevrilməyə imkan verən uyğunluq üçün iki dəyəri sınayır. Operandlar eyni olduqda doğru, fərqli olduqda isə yalan qaytarır. 9
!= Bərabərsizlik Operandlar bərabər deyilsə, doğru qaytarır 9
=== Şəxsiyyət Ciddi uyğunluq tərifindən istifadə edərək iki operandı "şəxsiyyət" üçün sınaqdan keçirir. Operandlar növə çevrilmədən bərabər olarsa, doğru qaytarır. 9
!== Eyni deyil Şəxsiyyət yoxlamasını həyata keçirir. Operandlar növə çevrilmədən bərabər deyilsə, doğru qaytarır. 9
> Daha çox Birinci operand ikincidən böyükdürsə, doğru qaytarır, əks halda false qaytarır. 10
>= Daha böyük və ya bərabər Birinci operand ikincidən az deyilsə, doğru qaytarır, əks halda false qaytarır. 10
Birinci operand ikincidən azdırsa doğru, əks halda false qaytarır. 10
Birinci operand ikincidən böyük deyilsə, doğru qaytarır, əks halda false qaytarır. 10
5 == "5"; // doğru 5 qaytarır!= -5.0; // doğru 5 qaytarır === "5"; // false false qaytarır === false; // doğru 1 qaytarır!== true; // doğru 1 qaytarır!= true; // false qaytaracaq, çünki true 1 3 > -3-ə çevrilir; // doğrunu qaytarır 3 >= "4"; // yalan qaytaracaq

5. Məntiqi operatorlar

Məntiqi operatorlar boolean dəyərləri qaytaran şərtləri birləşdirməyə imkan verir. Ən çox if ifadəsində istifadə olunur.

(2 < 3) && (3===3); // вернет true, так как выражения в обеих скобках дают true (x < 10 && x >0); // əgər x 0 ilə 10 arasında olarsa doğru qaytarılacaq !false; // doğru qaytarır

6. Bitwise operatorları

Bitwise Operatorlar operandlar üzərində sıfır və birlərin 32 bit ardıcıllığı kimi işləyin və ondalıq işarə ilə yazılmış əməliyyatın nəticəsini göstərən rəqəmli dəyər qaytarın. Tam ədədlər operand sayılır, operandın kəsr hissəsi atılır. Bitwise əməliyyatları, məsələn, məlumatların şifrələnməsi, bayraqlarla işləmək və giriş hüquqlarının məhdudlaşdırılması zamanı istifadə edilə bilər.

Cədvəl 6. Bitvi operatorlar
Operator/Əməliyyat Təsvir Prioritet
& Bitwise VƏ Hər iki bit 1 olarsa, nəticədə bit 1 olacaq. Əks halda, nəticə 0-dır. 8
| Bitwise OR Əgər operandlardan biri mövqedə 1-i ehtiva edirsə, nəticədə həmin mövqedə də 1 olacaq, əks halda həmin mövqedəki nəticə 0 olacaq. 6
^ XOR Əgər bir və yalnız bir dəyər hər hansı mövqedə 1-i ehtiva edirsə, nəticədə həmin mövqedə 1 olacaq, əks halda həmin mövqedəki nəticə 0 olacaq. 7
~ İnkar İfadə dəyərinin ikili təsviri üzərində bit üzrə inkar əməliyyatı yerinə yetirilir. Orijinal ifadədə 1 olan hər hansı mövqe 0 ilə əvəz olunur. Orijinal ifadədə 0 olan hər hansı mövqe 0 olur. Müsbət ədədlər 0-dan, mənfi ədədlər -1-dən başlayır, buna görə də ~ n == -(n+1) . 14
Operator birinci operandın bitlərini ikinci operandın təyin etdiyi bit mövqelərinin sayı ilə sola keçirir. Sıfırlar sağdakı mövqeləri doldurmaq üçün istifadə olunur. Sol operandla eyni tipli nəticəni qaytarın. 11
>> Bit sağa sürüşdürün Operator birinci operandın bitlərini ikinci operandın təyin etdiyi bit mövqelərinin sayına görə sağa keçirir. Diapazondan kənar olan rəqəmlər silinir. Ən əhəmiyyətli bit (32-ci) nəticənin işarəsini saxlamaq üçün dəyişməz qalır. Birinci operand müsbət olarsa, nəticənin yüksək bitləri sıfırlarla doldurulur; birinci operand mənfi olarsa, nəticənin yüksək bitləri birlərlə doldurulur. Dəyəri bir mövqe ilə sağa sürüşdürmək 2-yə bölməyə (qalanı atmaqla) bərabərdir, iki mövqe ilə sağa keçmək isə 4-ə bölməyə bərabərdir və s. 11
>>> İşarəsiz bit istiqamətində sağa sürüşdürmə Operator birinci operandın bitlərini ikinci operandın təyin etdiyi bit mövqelərinin sayına görə sağa keçirir. Birinci operandın işarəsindən asılı olmayaraq sola sıfırlar əlavə edilir. Diapazondan kənar olan rəqəmlər silinir. 11
var x = 9, y = 5, z = 2, s = -5, nəticə; // 9 1001-ə ekvivalentdir, 5 0101 nəticəyə bərabərdir = x & y; // 1 (0001-ə ekvivalent) qaytarır nəticə = x | y; // 13 (1101-ə ekvivalent) qaytarır nəticə = x ^ y; // 12 (1100-ə ekvivalent) nəticə verəcək = ~ y; // -6 (1100-ə ekvivalent) nəticə = x qaytarır<< y; // вернет 288 (эквивалентно 100100000) result = x >>z; // 2 qaytarır (10-a ekvivalent) nəticə = s >>> z; // 1073741822 qaytarır (11111111111111111111111111110-a ekvivalent)

7. Simli operatorlar

Simlər üzərində xüsusi şəkildə işləyən bir neçə operator var.

"1" + "10"; // "110" "1" + 10 qaytaracaq; // "110" 2 + 5 + "rəngli karandaşlar" qaytarır; // "7 rəngli karandaş" qaytarır "Rəngli karandaşlar" + 2 + 5; // "Rəngli karandaşlar 25" qaytarır "1" > "10"; // yanlış "10" qaytaracaq<= 10; // вернет true "СССР" == "ссср"; // вернет false x = "micro"; x+= "soft"; // вернет "microsoft"

8. Xüsusi Operatorlar

Cədvəl 8. Xüsusi operatorlar
Operator/Əməliyyat Təsvir Prioritet
. Mülkiyyətə daxil olmaq Obyektin xassəsinə daxil olur. 15
, Çoxsaylı hesablama Bir sətirdə yazılmış çoxlu müstəqil ifadələri qiymətləndirir. 1
Massivin indeksləşdirilməsi Massiv elementlərinə və ya obyekt xassələrinə daxil olur. 15
() Funksiya çağırışı, qruplaşdırma Əməliyyatları qruplaşdırır və ya funksiyanı çağırır. 15
typeof Məlumat növünün tərifi Unary operator, operandın məlumat tipini qaytarır. 14
instanceof Obyekt növünü yoxlayın Operator obyektin müəyyən bir sinfin nümunəsi olub olmadığını yoxlayır. Sol operand obyekt olmalıdır, sağ operand obyekt sinfinin adını ehtiva etməlidir. Əgər solda göstərilən obyekt sağda göstərilən sinifin nümunəsidirsə, nəticə doğru, əks halda yanlış olacaq. 10
Mülkiyyətin olub-olmadığını yoxlamaq Sol operand sətir, sağ operand isə massiv və ya obyekt olmalıdır. Əgər sol dəyər obyektin xassəsidirsə, nəticə doğru olacaq. 10
yeni Obyektin yaradılması Operator qeyri-müəyyən xassələri olan yeni obyekt yaradır, sonra onu işə salmaq üçün konstruktor funksiyasını çağırır (parametrləri keçir). Massiv yaratmaq üçün də istifadə edilə bilər. 1
silin Operator obyektdən xassəni və ya massivdən elementi silməyə imkan verir. Silinmə uğurlu olarsa doğru, əks halda yalan qaytarır. Massiv elementi çıxarıldıqda onun uzunluğu dəyişmir. 14
void Qaytarılan dəyəri olmayan ifadənin müəyyən edilməsi Birlik operatoru, operandın dəyərini ləğv edir və aşağı qiymətə qaytarır. 14
?: Şərti ifadə əməliyyatı Üçlü operator sadə budaqlanma təşkil etməyə imkan verir. İfadədə iştirak edən üç operand var, birincisi boolean dəyər olmalıdır və ya ona çevrilməlidir, ikinci və üçüncü isə istənilən dəyər olmalıdır. Əgər birinci operand doğrudursa, şərti ifadə ikinci operandın qiymətini alacaq; yalan olarsa - üçüncüsü. 3
document.write("salam dünya"); // salam dünya sətrini göstərir i = 0, j = 1; // dəyişənlərdə dəyərləri saxlamaq funksiyası1(10, 5); // 10 və 5 parametrləri ilə funksiya çağırışı funksiya1 var year = ; // typeof (a:1) elementləri ilə massiv yaradır; // "obyekt"i qaytarır var d = new Date(); // Date() konstruktoru d instanceof Date istifadə edərək yeni obyekt yaradın; // true var mycar-ı qaytarır = (make: "Honda", model: "Accord", il: 2005); mycar-da "yapmaq"; // doğru qaytarır var obj = new Object(); // boş obyekt yaradır var food = ["süd", "çörək", "ət", "zeytun yağı", "pendir"]; yeməyi silmək; // x > 10 massivindən dördüncü elementi silir? x*2:x/2; // x > 10 olarsa x * 2, əks halda x / 2 qaytarır

9. JavaScript-də şərhlər

Tək sətirli şərh: şərh mətnindən əvvəl // simvolları ilə.