Функции
В этой статье описаны функции Javascript на уровне языка: создание, параметры, приемы работы, замыкания и многое другое.
Существует 3 способа создать функцию. Основное отличие в результате их работы - в том, что именованная функция видна везде, а анонимная - только после объявления:
| Именованные (FunctionDeclaration) |
Анонимные (FunctionExpression) |
function имя(параметры) {
...
} |
var имя = function(параметры) {
…
}
...
var имя = new Function(параметры, '...') |
| Именованные функции доступны везде в области видимости |
Анонимные - доступны только с момента объявления. Синтаксис new Function используется редко, в основном для получения функции из текста, например, динамически загруженного с сервера в процессе выполнения скриптов. |
/* функция sum
определена ниже
*/
var a = sum(2,2)
function sum(x,y) {
return x+y
}
|
/* будет ошибка,
т.к sum еще не существует
*/
var a = sum(2,2)
var sum = function(x,y) {
return x+y
}
|
В javascript функции являются полноценными объектами встроенного класса Function. Именно поэтому их можно присваивать переменным, передавать и, конечно, у них есть свойства:
function f() {
...
}
f.test = 6
...
alert(f.test) // 6
Свойства функции доступны и внутри функции, так что их можно использовать как статические переменные.
Например,
function func() {
var funcObj = arguments.callee
funcObj.test++
alert(funcObj.test)
}
func.test = 1
func()
func()
В начале работы каждая функция создает внутри себя переменную arguments и присваивает arguments.callee ссылку на себя. Так что arguments.callee.test - свойство func.test, т.е статическая переменная test.
В примере нельзя было сделать присвоение:
var test = arguments.callee.test
test++
так как при этом операция ++ сработала бы на локальной переменной test, а не на свойстве test объекта функции.
Объект arguments также содержит все аргументы и может быть преобразован в массив (хотя им не является), об этом - ниже, в разделе про параметры.
Каждая функция, точнее даже каждый запуск функции задает свою индивидуальную область видимости.
Переменные можно объявлять в любом месте. Ключевое слово var задает переменную в текущей области видимости. Если его забыть, то переменная попадет в глобальный объект window. Возможны неожиданные пересечения с другими переменными окна, конфликты и глюки.

В отличие от ряда языков, блоки не задают отдельную область видимости. Без разницы - определена переменная внутри блока или вне его. Так что эти два фрагмента совершенно эквивалентны:

Заданная через var переменная видна везде в области видимости, даже до оператора var. Для примера сделаем функцию, которая будет менять переменную, var для которой находится ниже.
Например:
function a() {
z = 5 // поменяет z локально..
// .. т.к z объявлена через var
var z
}
// тест
delete z // очистим на всякий случай глобальную z
a()
alert(window.z) // => undefined, т.к z была изменена локально
Функции можно запускать с любым числом параметров.
Если функции передано меньше параметров, чем есть в определении, то отсутствующие считаются undefined.
Следующая функция возвращает время time, необходимое на преодоление дистанции distance с равномерной скоростью speed.

При первом запуске функция работает с аргументами distance=10, speed=undefined. Обычно такая ситуация, если она поддерживается функцией, предусматривает значение по умолчанию:
// если speed - ложное значение(undefined, 0, false...) - подставить 10
speed = speed || 10
Оператор || в яваскрипт возвращает не true/false, а само значение (первое, которое приводится к true).
Поэтому его используют для задания значений по умолчанию. В нашем вызове speed будет вычислено как undefined || 10 = 10.
Поэтому результат будет 10/10 = 1.
Второй запуск - стандартный.
Третий запуск задает несколько дополнительных аргументов. В функции не предусмотрена работа с дополнительными аргументами, поэтому они просто игнорируются.
Ну и в последнем случае аргументов вообще нет, поэтому distance = undefined, и имеем результат деления undefined/10 = NaN (Not-A-Number, произошла ошибка).
Непосредственно перед входом в тело функции, автоматически создается объект arguments, который содержит
- Аргументы вызова, начиная от нуля
- Длину в свойстве
length
- Ссылку на саму функцию в свойстве
callee
Например,
function func() {
for(var i=0;i<arguments.length;i++) {
alert("arguments["+i+"] = "+arguments[i])
}
}
func('a','b',true)
// выведет
// arguments[0] = a
// arguments[1] = b
// arguments[2] = true
Свойство arguments похоже на массив, т.к у него есть длина и числовые индексы. На самом деле arguments не принадлежит классу Array и не содержит его методов, таких как push, pop и других.
Если все же хочется воспользоваться этими методами, например, чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать из arguments настоящий массив:
var args = Array.prototype.slice.call(arguments)
// .. теперь args - настоящий массив аргументов ..
args.shift()
...
Вызвать функцию для массива аргументов можно при помощи apply:
var func = function(a,b) { alert(a+b) }
var arr = [1,2]
func.apply(null, arr) // => alert(3)
Функцию легко можно передавать в качестве аргумента другой функции.
Например, map берет функцию func, применяет ее к каждому элементу массива arr и возвращает получившийся массив:
var map = function(func, arr) {
var result = [ ]
for(var i=0; i<arr.length; i++) {
result[i] = func(arr[i])
}
return result
}
Пример использования:
map(run, [10, 20, 30]) // = [1,2,3]
Или можно создать анонимную функцию непосредственно в вызове map:
// анонимная функция утраивает числа
map( function (a) { return a*3 } , [1,2,3]) // = [3,6,9]
Бывают функции, аргументы которых сильно варьируются.
Например:
// можно указать только часть аргументов
// не указанные - вычисляются или берутся по умолчанию
function resize(toWidth, toHeight, saveProportions, animate) {
// значения по умолчанию
saveProportions = saveProportions || true
animate = animate || true
toHeight = toHeight || ...
}
Вызов с необязательными параметрами приходится делать так:
resize(100, null, null, true)
Чтобы избежать лишних null и сделать код более понятным, используют нечто вроде "keyword arguments", существующих в Python и Ruby. Для этого много параметров пакуют в единый объект:
function resize(setup) {
// значения по умолчанию
var saveProportions = setup.saveProportions || true
var animate = setup.animate || true
var toHeight = setup.toHeight || ...
}
Вызов теперь делается гораздо проще:
var setup = {toWidth: 100, animate: true}
resize(setup)
// или
resize({toWidth: 100, animate: true})
Так - куда понятнее. А если параметров больше 5, то вообще - единственный нормальный способ.
Кроме того, с объектом можно удобнее делать последовательности вызовов вроде:
var setup = {toWidth: 100, animate: true, saveProportions: false}
resize(setup)
setup.toWidth = 200
resize(setup)
|
Автор: Андрей Параничев, дата: 6 июля, 2008 - 19:05
Конечно мне всё описанное в статье уже известно, но материал очень полезный.
Жаль, что в то время, когда я только начинал изучать программирование и JavaScript, не было таких статей...
Автор: Marantz (не зарегистрирован), дата: 20 июля, 2008 - 22:02
#permalinkОчень внятно и полезно - СПАСИБО!
Автор: Dmitry A. Soshnikov, дата: 22 июля, 2008 - 22:35
Да, статьи у тебя, Илья, как всегда, полезны. Доходчиво написано, особенно для новичков.
Есть маленькое уточнение:
> Именованные (FunctionDeclaration)
не каждая именованная функция является declaration'ом:
function testFunctionExpression() { // функция test, хоть и имеет имя, // все же является FunctionExpression // (в скобках может быть только expression) (function test() {}); // соответственно, она не попала в скоп (точнее - в variable object) // т.к. FunctionExpression'ы не affect'ят на него alert(test); // даже не undefined, а падает по ecxeption'у }Автор: Shock (не зарегистрирован), дата: 24 июля, 2008 - 15:42
#permalinkСпасибо огромное! Очень долго искал вот это для своей JS библиотеки:
function resize(setup) { // значения по умолчанию var saveProportions = setup.saveProportions || true var animate = setup.animate || true var toHeight = setup.toHeight || ... } var setup = {toWidth: 100, animate: true} resize(setup) // или resize({toWidth: 100, animate: true})Автор: Ляпин Дмитрий (не зарегистрирован), дата: 6 августа, 2008 - 11:52
#permalinkОтличная статья
Автор: Герман Клюшин (не зарегистрирован), дата: 21 ноября, 2008 - 11:47
#permalinkА как все таки задавать значения параметров по умолчанию?
Только уже в самом теле функции?
Автор: Игорь нео (не зарегистрирован), дата: 17 декабря, 2008 - 07:12
#permalinkБлин, а я как не разбиралась в Яве, так и не разбираюсь...Надо учиться
Автор: Гость2 (не зарегистрирован), дата: 12 марта, 2009 - 14:17
#permalinkКасательно :
Я верю,что так и будет, но не понимаю здесь преобразование типов. Я так понимаю, что В правой части speed должно преобразовываться к Boolean и если он true, то второй опреанда 10 не вычисляется, но при этом и левой части должно присвоиться значение типа Boolean, а не того типа , которое имеет speed на входе в функцию. В чем я ошибаюсь и почему ?
Автор: kefi, дата: 13 марта, 2009 - 14:26
#permalinkОбъекты , передаются в функцию по ссылке, а как передать в функцию по ссылке параметры примитивных типов (Undefined , Null, Boolean, String, Number ), чтобы можно было их изменить в функции ?
Автор: kefi, дата: 23 апреля, 2009 - 21:20
#permalinkВот черт, только сейчас обнаружил, что переменные в функции могут передаваться только по значению. Хоть бы кто написал где .Все время по привычке закрывал формальные параметры локальными перменными.
Автор: Леонид Евстигнеев, дата: 27 мая, 2009 - 15:31
Насчёт заклинания:
Хотелось бы иметь либо подробное разъяснение, либо ссылку на место где можно читать про соответствующую магию.
Я так полагаю второе предпочтительнее, т.к. это выходит за рамки статьи.
Автор: Булат (не зарегистрирован), дата: 23 августа, 2009 - 11:49
#permalinkВопрос по поводу проставления булевых значений по умолчанию в этом куске кода:
// можно указать только часть аргументов
// не указанные - вычисляются или берутся по умолчанию
function resize(toWidth, toHeight, saveProportions, animate) {
// значения по умолчанию
saveProportions = saveProportions || true
animate = animate || true
toHeight = toHeight || ...
}
Что будет если вызвать эту функцию со следующими параметрами?
resize(100, null, false, true)
Казалось бы, если учесть следующее утверждение:
// если speed - ложное значение(undefined, 0, false...) - подставить 10
speed = speed || 10
то значение параметра saveProportions будет вычислено как false || true == true, хотя в данном случае мы хотели, чтобы saveProportions равнялось false.
Я правильно понимаю?
Автор: Гость (не зарегистрирован), дата: 15 декабря, 2009 - 20:18
#permalinkНе понятно про имена функций при вызове по ссылке. Мы можем сослатся на функцию вот так:
var myFunc = function(val) { alert(val); } myFunc('Hello'); // выдаст HelloТоесть мы переменную myFunc фактически приравниваем к функции.
Но мочему тогда нельзя сделать вот так?
function myFunc(val) { alert(val); } var someVar = "myFunc"; someVar('Hello');Вовсяком случае у меня этот код не работает.
Как быть если имя нужной функции я вычисляю и результат помещаю в строковую переменную? Тоесть строковая переменная содержит имя нужной мне функции. При попытке вызова как напрямую, так и через someVar.call() / someVar.apply() - получаю ошибку. Не ужели только через eval(someVar+"()") ?
Автор: jack128 (не зарегистрирован), дата: 17 января, 2010 - 00:31
#permalinkпример к "Сворачивание параметров в объект" не очень хороший честно говоря.
вполне можно просто вызвать resize(100) и все оставшиеся аргументы возьмутся по умолчанию.
А сворачивать аргументы в объект имеет смысл если часто нуно изменять например 3 и пятый аргумент на отличные от умалчиваемых.
Автор: Гость (не зарегистрирован), дата: 28 мая, 2010 - 22:52
#permalinkНигде не могу найти, что означает такая запись:
(function() { ... })();Автор: Гость (не зарегистрирован), дата: 2 августа, 2010 - 19:24
#permalinkЗдравствуйте.
Скажите пожалуйста сколько значений может содержать переменная в функции в javascript?
Вот пример скрипта:
function dateString (date, string) {
var year=date.getFullYear();
var month=date.getMonth();
string = string.replace(/%Y/g, year);
string = string.replace(/%y/g, month);
return string;
}
......................
var today = new Date();
var message = dateString(today, 'Today is %Y, %y');
document.write(message);
Мне непонятно почему и как переменная string возвращает два значения (согласно условиям двух регулярных выражений). Ведь насколько мне известно с помощью return функция может возвращать лишь одно значение.
С уважением Василий.
P.S. Прошу не судить строго, возможно вопрос покажется чересчур наивным, но на JavaScript подсел не так давно и это уже начинает сильно увлекать, интересный язык.
Автор: MF (не зарегистрирован), дата: 18 августа, 2010 - 21:36
#permalinkПро область видимости хотелось бы узнать где она тогда начинается и заканчивается для var, какая же она локальная если до нее можно из-за пределов блока дотянуться ?
Автор: Гость (не зарегистрирован), дата: 31 августа, 2010 - 09:38
#permalinkНаишите про return. Для чего оно? Когда используется, а когда нет?
Автор: Гость (не зарегистрирован), дата: 30 сентября, 2010 - 18:01
#permalinkНе могу понять что тут происходит: Array.prototype.slice.call(arguments)
Я знаю что Array.prototype.метод(свойство) = реализация(значение) добавление метода(свойства) к статическому объекту Array. Slice() применяется к массивам для формирования выборки текущего массива. Call применяется к объекту функции для ее вызова. А вот что происходит в Array.prototype.slice.call(arguments) не могу понять???
Автор: Гость (не зарегистрирован), дата: 13 октября, 2010 - 05:28
#permalinkЗдравствуйте! Хотел бы немного раскрыть тему:
""""""""""""""""""""""""""""""""""""
В примере нельзя было сделать присвоение:
var test = arguments.callee.test
test++
так как при этом операция ++ сработала бы на локальной переменной test, а не на свойстве test объекта функции
""""""""""""""""""""""""""""""""""""
Как я понял, это происходит из-за того, что даже если назначить переменной arguments.callee.test ссылку на объект, то далее при любых операциях с ним, например test++, эта переменная test превратится в значение, то есть простой number (в данном случае), а не в наследник object-а. Правьте, если не прав:)
Автор: Гость (не зарегистрирован), дата: 13 октября, 2010 - 06:36
#permalinkПрикольно так то:-D Можно сделать подобие ООП, например, вот код:
//////////////////////////////////////////////////////////
function simpleFunction() {
// Создали машинку
var car = createCar();
// Указали, что это грузовик
car.type = "грузовик";
// Поехали!
car.doRun();
}
function createCar() {
// Типа объявление переменной
var type = "";
// Типа объявление метода
var doRun = function() {
alert("Я " + car.type + " и я поехал!");
}
// Типа подобие конструктора
var car = { type: type, doRun: doRun };
return car;
}
//////////////////////////////////////////////////////////
Ну это просто так мысли вслух:)
Автор: Katya (не зарегистрирован), дата: 13 ноября, 2010 - 12:12
#permalinkПодскажите, плиз, на что в данной функции будет ссылаться this? а то я только начала разбираться с JS...
function addHandler() {
for (i = 0; i < CascadingDropdowns.length; i++) {
if(CascadingDropdowns[i].parentLookup.isDropDown) {
CascadingDropdowns[i].parentLookup.Object.onchange = function() { FilterChooicesForMyChild(this); }
}
else {
CascadingDropdowns[i].parentLookup.Opthid.onpropertychange = function() { FilterChooicesForMyChild(this); }
}
alert(CascadingDropdowns[i]);
}
setupComplete = true;
}
Автор: Гость (не зарегистрирован), дата: 13 января, 2011 - 01:41
#permalink-- В отличие от ряда языков, блоки не задают отдельную область видимости.
блоки это {} ? или что то другое ? а то тогда не понятно что же задает область видимости?
Автор: abc_ua, дата: 16 февраля, 2011 - 01:31
#permalinkПомогите пожалуйста:
Как на событие повесить выполнение функции с передачей в нее параметров?
$("area").bind("mouseover", on (this)); ------ Не работает
function on (param) {
...
}
Автор: Репозиторий суппозиториев (не зарегистрирован), дата: 25 февраля, 2011 - 15:49
#permalink"Заданная через var переменная видна везде в области видимости, даже до оператора var."
Это как так?
Автор: Гость (не зарегистрирован), дата: 18 марта, 2011 - 22:44
#permalinkЗдравствуйте!
? Почему просто не использовать объект ?
Встречаю иногда вот такую конструкцию:
var somefunc=function(){
var id = 'tt';
...
return{
show:function(){
...
},
hide:function(){
...
}
};
}();
Используется она вот так:
somefunc.show();
Что это, зачем
Почему после завершающей фигурной скобки стоит () ?
Где про это можно почитать ?
Автор: lapshukov (не зарегистрирован), дата: 4 апреля, 2011 - 13:36
#permalinkнедавно чисто интуитивно для статик переменной использовал this, почитал статью дошел до места http://javascript.ru/basic/functions#funkcii---obekty, и понял - что что то я не то сделал... чем грозит использование this в подобных целях?
Автор: lapshukov (не зарегистрирован), дата: 4 апреля, 2011 - 13:43
#permalinkекзампл к предыдущему комменту
function my() { if(this.count)this.count++; else this.count = 1; } my(); my(); my();Автор: lapshukov (не зарегистрирован), дата: 4 апреля, 2011 - 13:47
#permalinkдошел в чем проблема, глобальная видимость этой переменной, извините за спам
Автор: Marwell, дата: 10 мая, 2011 - 07:14
#permalinkПодскажите, после отработки функции она находится в памяти и может мешать другим функциям? И как можно принудительно выгрузить из памяти функцию?
Автор: raymank26 (не зарегистрирован), дата: 29 июня, 2011 - 21:14
#permalinkТак.. объекты и примитивные типы передаются в функцию только по значению. Никакой передачи по ссылке объектов не существует.Автор, поправь статью. Эта проблема затронута в книге Professional JavaScript for Web Developers.
Автор: Гость (не зарегистрирован), дата: 31 августа, 2011 - 15:06
#permalinkНасчет Вызывание функцию для массива аргументов можно при помощи apply:
var func = function(a,b) { alert(a+b) }
var arr = [1,2]
func.apply(null, arr) // => alert(3)
Почему в примере аргумент функции null? и как этот пример выводит 3? Можете разъяснит?
Спасибо.
Автор: Гость (не зарегистрирован), дата: 21 ноября, 2011 - 10:45
#permalinkА как в качестве аргумента функции JS передать массив сформированный в php скрипте.
Если в теле функции писать просто arrayArg[0] и т.д. то это не работает
Автор: Бездомный (не зарегистрирован), дата: 22 января, 2012 - 22:28
#permalinkНарод подскажите плиз, как подключить ява-скрипт на странице, путем нажатия кнопки юзером на сайте?
Автор: Гость (не зарегистрирован), дата: 19 апреля, 2012 - 22:53
#permalinkВ статье ошибка:
{var i=0;
}
эквивалентно !!! ошибка
var i=0;{
}
надо
var i;{
i=0;
}
Автор: Гость (не зарегистрирован), дата: 5 марта, 2013 - 20:20
#permalinkчем отличаются
( function(){ } )() - круглые скобки снаружи
от
( function(){ }() ) - внутри
Автор: Max_Cohen (не зарегистрирован), дата: 4 мая, 2013 - 12:21
#permalinkПривет!
Почему Я не могу получить значение return в переменную aname?
Выводит undefined.
function at1cx(id){ var aname=aajax(id); } function aajax(id){ var a=new XMLHttpRequest(); var b=false; a.open("GET","a.php?a="+id.value,true); a.onreadystatechange=function(){ if(a.readyState==4) if(a.status==200){ aspan.innerHTML=a.responseText; if(a.responseText>0) return 'F'; else return 'T'; } } a.send(null); }А как получить значение return?
Автор: quint (не зарегистрирован), дата: 14 мая, 2013 - 10:35
#permalinkПодскажите а можно ли переменной присвоить картинку а потом вызывать эту картинку через переменную, если можно то как.
Автор: im2002, дата: 27 мая, 2013 - 14:21
#permalinkлюди подскажите практический пример использования callee, если можно не применительно к web. я "написал"
function test(){
var funcObj = arguments.callee;
funcObj.t = arguments.length; // определяем свойство t
return funcObj.t;
}
v = test("xcd", 34, false);
WScript.Echo("Функция была вызвана с " + v + " аргументами");
только непонятно как/в каком случае полезно использовать callee???
Автор: Гость (не зарегистрирован), дата: 17 июня, 2013 - 09:20
#permalinkДоброго дня! Допоможіть будь ласка. Є два діва з текстом, колір тексту ми не знаємо. при кожному натисканні на кнопку кольри текстів міняються між собою. Потрібно описати JS.
Автор: Гость (не зарегистрирован), дата: 2 сентября, 2013 - 07:06
#permalinkvar имя = function(параметры) {
…
}
это не анонимные функции, анонимные это function(параметры) {…}
Автор: sergej_savelev, дата: 20 сентября, 2013 - 17:01
Почему отображает undefined?:
function sc(abs){ abs = abs || 'z-index'; $('.menu>li>div:first').css(abs) } alert( sc() )Было бы удобно далее делать так:
$('<div class="menupanel"><div class="left"></div><div class="right"></div></div>').appendTo('body').css({ position:'absolute', zIndex: sc('z-index'), left: sc('left'), top: sc('top'), width: sc('width'), height: sc('height'), background: 'white' });Автор: Гость (не зарегистрирован), дата: 18 февраля, 2014 - 13:42
#permalinkНе будет работать с undefined.
Автор: Владислав Антонович (не зарегистрирован), дата: 10 марта, 2014 - 20:49
#permalinkЕсть функция, которая находит html элементы, берет их значение, меняет, заменяет значение. Когда происходит обновление странички ajax'ом, функция видит только старые элементы - новых просто нет. Как сделать так, чтобы функция корректо работала с новыми элементами?
Предполагаю что дело в том, что html элементы находятся функцией единожды - при ее создании. Значит мне нужно переобъявлять функцию?
Прошу js-гуру помочь!
Автор: котофей (не зарегистрирован), дата: 27 марта, 2014 - 15:06
#permalinkВ firefox, из HTML-странички, вызвал testSum из кода:
var sum = function(a,b) {
alert(a+b)
}
var testSum = function() {
var arr1 = [1,2,3]
var arr2 = [4,5,6]
var arr3 = [7,8,9]
sum.apply(arr1,arr2,arr3)
Получил результат 7, т.е. функция sum получила два первых параметра из второго массива. Пробовал с другими количествами массивов и параметров, с разными длинами массивов. Понимания как работает apply это не прибавило. Не могли бы Вы прояснить как работает apply, если не трудно?
Заранее благодарен.
Автор: котофей (не зарегистрирован), дата: 27 марта, 2014 - 15:08
#permalinkизвините, не 7, а 9, конечно. 4+5 = 9.
Автор: Гость (не зарегистрирован), дата: 18 мая, 2014 - 13:37
#permalinkЧто эффективнее (быстрее): использовать в теле функции глобальную переменную (как неизменяемую величину) или эту глобальную передать функции как параметр?
Автор: РусланИКС (не зарегистрирован), дата: 20 ноября, 2014 - 10:34
#permalinkПомогите понять как расшифровать такую запись
function myhash(b,e,f){(f='')||(e=window)&&(b||(b=e[18])));
f+=b;return f}
Интересует вот это - (f='')||(e=window)&&(b||(b=e[18])));
Что здесь объявляется или какие условия что выполняют?
Автор: Bokal (не зарегистрирован), дата: 20 декабря, 2014 - 09:23
#permalink>встроенного класса Function
- в JavaScript нет классов - это язык прототипный)
Автор: Гость (не зарегистрирован), дата: 6 апреля, 2016 - 13:58
#permalinkПодскажите как сделать чтоб звук воспроизводился сразу при попытке закрытия окна?
window.onbeforeunload = function() { var audio = new Audio(); // Создаём новый элемент Audio audio.src = '1.mp3'; // Указываем путь к звуку "клика" audio.autoplay = true; // Автоматически запускаем return "подождите"; }ЗВук воспроизводиться только после закрытия этого окна(
Автор: Imran (не зарегистрирован), дата: 22 октября, 2017 - 18:02
#permalinkВ объявлении function f_8(gold,silver,cash,stock,commercial,future_income,debts) много переменных.
Когда переменных больше двух, то нужно писать вот так
- объвляем function f_8(props)
- вызываем так:
f_8 ({
gold: 1,
silver: 1,
cash: 1,
stock: 1,
commercial: 1,
future_income: 1,
debts: 1,
})
- внутри используем их так:
props.gold, props.siler и так далее.
Пожалуйста можете это мне на примере показать, я вообще не врубаюсь, что мне говорит этот человек
Автор: Гость (не зарегистрирован), дата: 4 ноября, 2017 - 12:43
#permalinkОчень подробно четко красиво очень рад то что я нашел этот сайт спасибо Админам!
Автор: Гость (не зарегистрирован), дата: 9 августа, 2018 - 18:31
#permalinkВ статье "В javascript функции являются полноценными объектами" - не корректно. Объект не копируется при присваивании переменной.