Известно, что в Javascript параметры функции передаются только по значению, нельзя передать параметр простого типа по ссылке.

О чем это мы? В программировании существует два способа передачи параметров функции: по ссылке и по значению. Когда параметр передается по значению, то функция только использует это значение, значение фактической переменной изменить она не в силах, даже если в функции переменной присваивается новое значение, как только функция закончит работу, значение нашей переменной станет прежним, каким оно было до работы функции. Когда параметр передается по ссылке, то изменение значения переменной внутри функции происходит реально и на выходе из функции наша переменная уже имеет новое значение. Это очень нужная штука, а в Javascript она не работает. 

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

В моей таблице стилей CSS задано 2 объекта. Объект с id="d1" имеет ширину 150 px, объект с id="d2" имеет ширину 200 px:

#d1 { width: 150px; }
#d2 { width: 200px; }

В HTML-коде заданы оба объекта (я не привожу этот фрагмент за его несущественностью) и два вызова функции. При первом вызове функция processDecreaseWidth будет изменять значение атрибута width для первого объекта, при следующем вызове функция будет изменять значение атрибута width для второго объекта. Функция processDecreaseWidth имеет два входных параметра. Первый параметр - это id, по которому определяется, с каким объектом работать. Второй параметр - соответствует изменяемой переменной, отвечающей за ширину объекта.

Привожу фрагменты вызова функций:

"javascript:processDecreaseWidth('d1',thisWidthD1)"

"javascript:processDecreaseWidth('d2',thisWidthD2)"

В сценарии на Javascript сначала задаются интересующие нас переменные. Им присваиваются начальные значения ширины объектов, те же, что и в таблице стилей CSS:

var thisWidthD1=150;

thisWidthD2=200;

Затем следует код функции, где ElId - id объекта, thisWidth - ширина объекта. Сначала функция присваивает переменной thisWidth значение новой ширины, затем обрабатываемому объекту присваивается новая ширина:

function processDecreaseWidth(ElId,thisWidth)
{
    if (thisWidth > 2) 
    {
        thisWidth=thisWidth-2;
        document.getElementById(ElId).style.width=thisWidth+"px";
        reformWidth(ElId,thisWidth);
    }
}

Обратите внимание, в конце функции processDecreaseWidth вызывается функция reformWidth, которая присваивает переменным, отвечающим за ширину объекта, новые значения. Вот код этой функции:

function reformWidth(ElId,thisWidth)
{
    switch (ElId)
    {
        case "d1": thisWidthD1=thisWidth;
        break;
        case "d2": thisWidthD2=thisWidth;
        break;
    }
}

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

Добавить комментарий

Комментарии  

Adele
0 # Adele 15.01.2021 03:30
Ꮮooқ att online reviews of tһe car and model to find out what wοrks, what doeѕn't, and that whіch yߋu may һave a much problemѕ with.
The hardest pɑrt iis ɡoing to be installing tһe Aftermarket BMW Radio playeer
іtself. On the otheг hаnd, tһe replacement fгom the lens is an expensive
option ɑnd you also must search for ѡays in order to beat the cost.


my blog; ase heavy duty truck certification: http://Www.learndrawing.com/__media__/js/netsoltrademark.php?d=www.telcosystems.com%2F__media__%2Fjs%2Fnetsoltrademark.php%3Fd%3Dwww.asecertify.com%252Fcompany.htm
Ответить | Сообщить модератору
Marjorie
0 # Marjorie 02.01.2021 17:29
We're a group of volunteers and opening a
new scheme in our community. Your site provided us with valuable
info to work on. You have done an impressive job and our entire community will be grateful to you.


my blog: viagra: http://www.pornvideoshd.net
Ответить | Сообщить модератору
Elane
0 # Elane 01.01.2021 04:37
Тhе shifting with the gears iѕ manufactured creaky
once tһe transmission fluid breaks ⅾ᧐wn and never as smooth
аs it shouⅼd bе. They can uѕually allⲟw you to
narrow things down in thе event youu teⅼl tһem whɑtever you're looking foг.
It's not harɗ to sift the honest online dealers frоm tһe shady ones.



my page ase certification training classes: http://verndowns.com/__media__/js/netsoltrademark.php?d=www.asecertify.com%2FAudioStudyMainPage.htm
Ответить | Сообщить модератору
Kaley
0 # Kaley 28.12.2020 04:52
Thhe latest as well as the most talked-about wi-fi technology is the NFC
or Near Feld Communication, whoch lets users exchange data by tapping their devices together.
Accsense Product Manager Danaa Kennedy explains
his enthusiasm: "Increasingly we're focusing on expanding the ability of our own Accsense systems on the market's specific needs, so that we're now storing the servers ourselves and offering direct support. Eventually, electronics manufacturers started thinking about the possibilities of automating domestic microcontroller based devices.

my blog post: ink cartridges reno: https://Korrespondent.net/default.aspx?page_id=60&lang=ru&stx=%3ca%20href%3dhttp%3a%2f%2fwww.cartridgeonwheelsreno.com%2Fprinter-toner-reno%2F&roi=0&st=1
Ответить | Сообщить модератору
Manuela
0 # Manuela 24.12.2020 14:12
Boost conversion - how will you define conversion, is it once the user reggisters in your site or whenever a user
buys from the site. In addition, there are countless firms that promised me a guaranteed ranking
on Google, Yahoo and Bing. You really do not wait to press some type off computer button and then use a totally automated money nnet machine.


Feel free to visit my web page ... SEO
wizard Lux: https://www.intersnap.com/search-engine-optimization/seo-wizard-lux-nv/
Ответить | Сообщить модератору
Rashad
0 # Rashad 22.12.2020 04:39
generic cialis 2 dollar 23 cent cialis pictures how can i buy a low
cost cialis: https://cialisbin.com/# - medicine cialis www cialis over the counter: https://cialisbin.com/# cialis 10mg or
20mg who is online
Ответить | Сообщить модератору
Stepanie
0 # Stepanie 20.11.2020 14:57
viagra black review stendra vs viagra: https://viagenpwr.com/# viagra
buy jump to natural viagra: https://viagenpwr.com/# - viagra side effects with alcohol guestbook.php?a ct= super viagra
Ответить | Сообщить модератору
Franchesca
0 # Franchesca 14.11.2020 07:08
viagra and alcohol side effects interests viagra for sale online: http://viasldnfl.com/# viagra viagra lowest
prices viagra for sale online: http://viasldnfl.com/# - trackback einen kommentar hinterlassen viagra purchase of viagra and
viagra pills
Ответить | Сообщить модератору
Young
0 # Young 17.05.2020 08:41
buy generic viagra pills online sophia viagra hot: http://viagrawinner.com/# viagra 10mg or 20mg legend sophia viagra: http://viagrawinner.com/#
- viagra online uk cheap viagra tadalafil generic
Ответить | Сообщить модератору
Aretha
0 # Aretha 04.04.2020 05:52
viagra safety buy generic viagra online: http://viagenmdx.com/# buy viagra online email
e-mail over the counter viagra cvs: http://viagenmdx.com/# - viagra 10 mg 4 tablet display posts from previous viagra pills price edit options
Ответить | Сообщить модератору
Sommer
0 # Sommer 03.04.2020 04:14
coronavirus fatality rate chloroquine phosphate
250 mg: http://chloroquine-phosphate-250mg.com/# coronavirus 6th remdesivir and chloroquine: http://chloroquine-phosphate-250mg.com/# -
coronavirus 5 million coronavirus zero patient
Ответить | Сообщить модератору
Hye
0 # Hye 01.04.2020 03:37
online viagra generico generic name
for viagra: http://viagenmdx.com/# viagra generic online in descending
order online viagra: http://viagenmdx.com/# - viagra for women dosage registered users viagra information blog not logged in
Ответить | Сообщить модератору
Cortez
0 # Cortez 29.03.2020 22:40
vardenafil viagra viagra order viagra online: http://viagenusa.com/# uk sales
viagra and viagra generic viagra usa pharmacy: http://viagenusa.com/# - viagra
5mg generic replies high doses of viagra
Ответить | Сообщить модератору
Precious
-1 # Precious 27.03.2020 19:37
coronavirus 75 alcohol chloroquine drug: http://chloroquine-cureforcoronavirus.com/# coronavirus 0.12 micron buy chloroquine online: http://chloroquine-cureforcoronavirus.com/# - coronavirus 2020 symptoms 2 coronavirus in usa
Ответить | Сообщить модератору
Phoebe
0 # Phoebe 16.03.2020 06:21
viagra and alcohol side effects all times are utc
usa made generic viagra
for men: http://genviagrafx.com/# canadian pharmacy viagra 20mg joined pills for sale: http://genviagrafx.com/# - order cheap viagra
viagra, viagra and levitra
Ответить | Сообщить модератору