Встроенные Javascript функции

В javascript достаточно много функций, встроенных в синтаксис языка. Рассмотрим одну из них.

eval(строка)


Рассмотрим примеры использования функции eval:

1
2
3
var y = 5; // значение у равно 5
var x = "if (y==5) y*2-3"; // значение х равно строке символов
var rezult = eval(x); // rezult равно 7

 

Пользовательские Javascript функции

Синтаксис создания функции:

  1. Функция в роли процедуры. Если функция выполняет какие-либо действия и не возвращает значение:
    function имя_функции(аргументы){
    	код;
    }

     

    В javascript вызов функции в роли процедуры происходит следующим образом:

    имя_функции (аргументы); // с агрументами
    имя_функции (); // без аргументов

    Пример:

    function sayHello()
    {
    	alert("hello");
    }
    //...
    sayHello();
  2. Если функция возвращает значение
    function имя_функции(аргументы){
    	код;
    	return результат или выражение
    }

     

    В javaScript вызов функции, возвращающей значение, происходит, например, следующим образом:

    var a = имя_функции (аргументы);
    alert(a);
    var b = a + a;

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

Как видно из примера, после return функция действительно завершает свою работу. Поэтому оператор alert("2") выполняться уже не будет.
Вызов же функции происходит через присваивание. Вызов в данном примере можно также организовать так: alert(sayHello()); , но это не рекомендуемый вариант.

 
Важно: Таким образом, оператор return указывает на возвращаемое значение функции, которое будет передано переменной при следующей форме вызова:
переменная = имя_функции();

 

Javascript функции с параметрами (аргументами) и возврат значений

Рассмотрим подробнее использование инструкции return в функции javascript на двух примерах. Кроме того, рассмотрим использование в Javascript функции с параметрами (аргументами).

  1. функция возвращает значение undefined, но выполняет какие-то действия:

 

1
2
3
4
5
6
function sayHello(userName)
{
	alert("Привет " + userName);
}
sayHello("Вася");
sayHello("Петя");

В примере функция имеет один аргумент, указанный в скобках. Переменная userName примет то значение, которое указано в скобках при вызове функции "Вася" и "Петя". Значит при первом вызове функция выведет в диалоговое окно Привет Вася, при втором — Привет Петя.

  1. функция возвращает конкретное значение:

 

1
2
3
4
5
6
function sayHello(userName)
{
	return "Привет " + userName;
}
var a = sayHello("Вася");
alert(a);

 

Важно: Обратите внимание на разницу между вызовом функции без инструкции return и с инструкцией: в первом случае функция вызывается как оператор, возвращая значение undefined; во втором случаем функция вызывается через присваивание, либо участвуя в выражениях (см. ниже)
 

Все способы создания пользовательских функций

  1. классический синтаксис
    function a1(x, y) { 
       return x + y; 
    }
  2. явное создание объекта Function
    //обязательным является только последний аргумент – тело функции 
    var a1 = new Function('x', 'y', 'return x + y');

    или

    var a1 = new Function('return "hello"');
  3. еще один вариант создания
    var a1 = function(x, y) { return x + y; };

Вызов функций во всех случаях будет:

var a = a1(3, 4);

Использование выражений с функциями

Обычное использование javascript функции:

1
2
3
4
5
6
7
function sum(arg1,arg2)
{
	var a=arg1+arg2;
	return a;
}
var b=sum(1,2);
alert(b);

Функция как составная часть выражения:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function sum(arg1,arg2)
{
	var a=arg1+arg2;
	return a;
}
var b=sum(1,2);
alert(b);
 
function add()
{
	var c=1+sum(1,2);
	return c;
}
var d=add();
alert(d);

Во второй функции используется выражение, ссылающееся на первую функцию (в 11-й строке).


Рассмотрим другие варианты использования выражений с функциями (только для функций, которые возвращают результат):
Функция:

1
2
3
4
function plRectangle(width, height){
	var S = width * height;
	return S
}

Варианты выражений:

  1. Вызов функции как часть выражения:
    1
    
    S3 = 0.5 * plRectangle(a, b);
  2. Вызов функции в логических выражениях
    1
    2
    
    if (plRectangle(a, b) > plRectangle(c, d))
    alert("Первый прямоугольник больше второго");
  3. Вызов javascript функции в качестве параметра другой функции
    1
    2
    3
    
    var х = "25рх";
    var у = 12;
    var S = plRectangle(parselnt(x), у);

 

Область видимости переменных. Javascript глобальные и локальные переменные в функции

Область видимости переменной — область кода, в котором переменная доступна для использования.

  1. Глобальные переменные
    — создаются на уровне сценария и сохраняются до конца сценария;
    — объявляются до описания javascript функции;
    — могут быть причиной сложно находимых ошибок;
  2. Локальные переменные
    — создаются внутри фрагментов кода и не видны извне;
    — явно объявляются в теле javascript функции;
    — аргументы (параметры) функции — всегда локальные переменные;
    — лучше использовать локальные переменные, так как доступ к ним больше контролируется.

 

ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННЫХ

Рассмотрим конкретные примеры области видимости переменных в javascript при использовании глобальных и локальных переменных.

 

    1
    2
    3
    4
    5
    6
    7
    8
    
    var S = 2; // Глобальная переменная S
    function plRectangle(width, height){
    	var S = width * height;
    	return S // Локальная переменная S
    }
    z = plRectangle(2, 3);
    alert(z);
    alert(S);

     

Пример: Значение z равно 6, а значение S осталось равным 2, то есть значению глобальной переменной, определенной во внешней программе
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function plRectangle(width, height)
    {
    	var s = width * height; // аргументы всегда локальны
    	width = width + 10; 
    	return s
    }
    width = 2;
    height = 3;
    z = plRectangle(width, height);
    alert(z);
    alert(width);

     

Пример: Значение z равно 6; значение переменной width равно 2, то есть осталось без изменений
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var S = 2; // Глобальная переменная S
    function plRectangle(width, height)
    {
    	S = width * height;
    	// заменяем глобальную переменную:
    	return S // S - глобальная переменная (т.к. без определения var)
    }
    var z = plRectangle(2, 3);
    alert(z);
    alert(S);

     

Пример: Значения и z и S равны 6; S — глобальная переменная
    1
    2
    3
    4
    5
    6
    7
    8
    
    function Plrectangle(width, height){
    	S = width * height; //глобальная переменная
    	return S
    }
    z = Plrectangle(2, 3);
    S=2; // изменяем глобальную переменную
    alert(z);
    alert (S);

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function plRectangle(width, height)
    {
    var S = width * height;
    var x = 17;
    return S
    }
    z = plRectangle(2,3);
    alert(z);
    alert(x); // не определена во внешней программе
    alert (S); // не определена во внешней программе
     
Пример: Значение z равно 6; переменная S во внешней программе не определена; переменная х во внешней программе не определена

Рекурсивная функция javascript

Важно: В информатике и программировании, а, соответственно, и в javascript, рекурсия — это вызов функции из самой же функции, т.е. функция в функции

 

Бывают также косвенная или сложная рекурсия, когда функция вызывается не непосредственно из самой себя, а из вложенной в нее функции: например, функция Aвызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Рекурсия javascript рассмотрена ниже на примере возведения числа в степень.
Для начала рассмотрим итерационный вариант возведения в степень, т.е. с использованием цикла:

Пример: Используя функцию, необходимо вычислять возведение числа в степень. Выполнить задание, используя цикл for


 

Показать решение:

Теперь выполним возведение числа в степень через рекурсию:

javascript рекурсия, возведение в степень