29
Введение в JavaScript функции

функции в Java script

Embed Size (px)

Citation preview

Page 1: функции в Java script

Введение в JavaScript

функции

Page 2: функции в Java script

Функция JavaScript представляет собой блок кода, предназначенный для

выполнения конкретной задачи.

Функция JavaScript выполняется, когда "что-то" вызывает его (называет).

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

functionName(parameter1, parameter2, parameter3) { code to be executed}

JavaScript Functions

function myFunction(p1, p2) { return p1 * p2;}

var x = myFunction(5, 10);console.log(x);

Page 3: функции в Java script

Functions

Page 4: функции в Java script

Вызов:

● При возникновении события (когда пользователь нажимает кнопку)● Когда он вызывается (называется) из кода JavaScript● Автоматически (сам вызывается)

Возврат значения:Когда JavaScript достигает оператора возврата, то функция прекратит выполнение.

Возвращаемое значение "возвращается" обратно в "вызывающей".

Functions

Page 5: функции в Java script

Цели Function

Reuse

Information

hiding

цели

Composition

Page 6: функции в Java script

Цели Function

Page 7: функции в Java script

Определение Function

Функции JavaScript определяются с помощью ключевого слова function.

Вы можете использовать объявление function или expression function.

Выражение функции может быть сохранено в переменной:

var x = function (a, b) {return a * b};

После того, как выражение функция сохранена в переменной, переменная может быть

использована в качестве функции:

var z = x(4, 3);

Функция выше фактически является анонимной функцией (функция без имени).

Page 8: функции в Java script

Определение Function

Конструктор Function():

var myFunction = new Function("a", "b", "return a * b");

// тоже самое что и

var myFunction = function (a, b) {return a * b};

Page 9: функции в Java script

Определение Function Конструктор Function(): Анти-паттерн

Page 10: функции в Java script

Определение Function

Demo:

// v 1.1

function foo (a, b) {

return a * b;

}

var z = foo (4, 3);

console.log(z);

Page 11: функции в Java script

Определение Function

Demo :

// v 1.1

function foo (a, b) {

return a * b

}

var z = foo (4, 3);

console.log(z);

// v 1.2

var z = foo (4, 3);

function foo (a, b) {

return a * b;

}

console.log(z);

Page 12: функции в Java script

Определение Function

Способы:

// v 1.1

function foo (a, b) {

return a * b

}

var z = foo (4, 3);

console.log(z);

// v 1.2

var z = foo (4, 3);

function foo (a, b) {

return a * b

}

console.log(z);

// v 1.3

var x = function (a, b) {return a * b};

var z = x(4, 3);

Page 13: функции в Java script

Определение Function

Demo :

// v 1.1

function foo (a, b) {

return a * b

}

var z = foo (4, 3);

console.log(z);

// v 1.2

var z = foo (4, 3);

function foo (a, b) {

return a * b

}

console.log(z);

// v 1.3

var x = function (a, b) {return a * b};

var z = x(4, 3);

// v 1.4

var z = x(4, 3);

var x = function (a, b) {return a * b};

Page 14: функции в Java script

Определение Function

Demo :

// v 1.1

function foo (a, b) {

return a * b

}

var z = foo (4, 3);

console.log(z);

// v 1.2

var z = foo (4, 3);

function foo (a, b) {

return a * b

}

console.log(z);

// v 1.3

var x = function (a, b) {return a * b};

var z = x(4, 3);

// v 1.4

var z = x(4, 3);

var x = function (a, b) {return a * b};

Чтооооо?

Page 15: функции в Java script

Hoisting

Hoisting - это поведение перемещения объявленных переменных к началу текущей области

в JavaScript (по умолчанию).

x = 5; // Assign 5 to x

elem = document.getElementById("demo");

elem.innerHTML = x;

var x; // Declare x

JavaScript поднимает только объявление, но не инициализациюvar x = 5; // Initialize x

elem = document.getElementById("demo");

elem.innerHTML = x + " " + y;

var y = 7; // Initialize y

Чтобы избежать ошибок, всегда объявляйте все переменные в начале каждого scope!!!!!!

Page 16: функции в Java script

Hoisting

Page 17: функции в Java script

Само вызывающиеся Function

Вы должны добавить круглые скобки вокруг функции, чтобы указать, что это выражение функция:

(function () {

console.log("Hello!!"); // А вызову-ка сама себя

})();

Для чего:

- Предварительное вычисление

- Создание scope

Page 18: функции в Java script

Параметры Function

Параметры функции являются имена, перечисленные в определении функции.

Аргументы функции реальные значения, переданные (и полученные) функции.

functionName(parameter1, parameter2, parameter3) {

code to be executed

}

Параметры:

● Функций JavaScript типы данных для параметров не указываются.

● Функции JavaScript не выполняют проверку типов на переданных аргументов.

● Функции JavaScript не проверяют количество аргументов, полученных.

Page 19: функции в Java script

Параметры Function

Если функция вызывается с отсутствующими аргументами (меньше, чем объявлена),

отсутствующие значения устанавливаются :

undefined

Присвоение значения по умолчанию для параметра :

function myFunction(x, y) {

y = y || 0;

console.log(x, y)

}

Если функция вызывается слишком большим количеством аргументов (больше, чем

декларируется), эти аргументы не могут быть переданы, потому что они не имеют названия.

Они могут быть достигнуты только в объекте аргументов

Page 20: функции в Java script

Arguments Object

Объект аргумент содержит массив аргументов, используемых при вызове функции

(x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {

var i, sum = 0;

for (i = 0; i < arguments.length; i++) {

sum += arguments[i];

}

return sum;

}

Аргументы в действительности не является массивом. Это массиво-подобный объект.

Аргумент-объект имеет свойство длины, но у него не хватает всех методов массивов.

Page 21: функции в Java script

Вызов Function

Вызов функции приостанавливает выполнение текущей функции, передавая управление и

параметры новой функции. В дополнение к заявленным параметрам, каждая функция

получает два дополнительных параметра: this and arguments.

В JavaScript this, является объектом, который "владеет" текущим кодом.

Когда функция вызывается без объекта владельца, значение this становится глобальным

объектом.

Page 22: функции в Java script

Вызов Function как метода

Когда функция сохраняется как свойство объекта, мы называем это метод.

Связывания этого на объект происходит во время вызова.

var myObject = { firstName:"Bilbo", lastName: "Baggins", fullName: function () { return this.firstName + " " + this.lastName; }, getContex: function () { return this; }}myObject.fullName();myObject.getContex();

Page 23: функции в Java script

Вызов Function как Function

Функция не принадлежит ни одному объекту. В браузере объект страницы в окне браузера.

Функция автоматически становится функцией window .

function myFunction(a, b) { return a * b;}myFunction(10, 2); // myFunction(10, 2) will return 20

window.myFunction(10, 2); // window.myFunction(10, 2) will also return 20

function myFunction() {

return this;

}

myFunction(); // Will return the window object

Page 24: функции в Java script

Вызов Function как Function!!! Метод не может использовать внутреннюю функцию, чтобы помочь ему работать со свойствами объекта, потому что внутренняя функция не дает доступа метода в к объекту.

var add = function (a, b) { return a + b;};

var myObject = { value: 10}

myObject.double = function () { var helper = function () { this.value = add(this.value, this.value); };

helper(); // Invoke helper as a function.};

// Invoke double as a method.

myObject.double();console.log(myObject.value);

Page 25: функции в Java script

Вызов Function как FunctionК счастью, есть простой обходной путь.

var add = function (a, b) { return a + b;};

var myObject = { value: 10}

myObject.double = function () { var that = this;

var helper = function () { that.value = add(that.value, that.value); };

helper(); // Invoke helper as a function.};

// Invoke double as a method.

myObject.double();console.log(myObject.value);

Page 26: функции в Java script

Вызов Function с конструктором Function

Если вызову функции предшествует new, он является конструктором вызова.Cоздается новая функция, но поскольку функции JavaScript являются объектами, то на самом деле создается новый объект :

// This is a function constructor:function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2;}

// This creates a new objectvar x = new myFunction("Bilbo","Baggins");x.firstName;

Приставка new также изменяет поведение оператора return.

Page 27: функции в Java script

Вызов Function с методом Function

В JavaScript функции являются объектами. JavaScript функции имеют свойства и методы.call() и apply() предопределенные методы функции JavaScript. Оба метода могут быть использованы для вызова функции, и оба метода должны иметь объект владельцем в качестве первого параметра. Единственное отличие состоит в том, что call() принимает аргументы функции по отдельности, и apply() принимает аргументы функции в массиве..

var array = [3, 4];var sum = add.apply(null, array);

Page 28: функции в Java script

Вызов Function с методом Function

// Create a constructor function called Quo.It makes an object with a status property.var Quo = function (string) { this.status = string;};

// Give all instances of Quo a public method called get_status.Quo.prototype.get_status = function ( ) { return this.status;};

// Make an instance of Quo.var myQuo = new Quo("confused");console.log(myQuo.get_status()); // confused

// Make an object with a status member.var statusObject = { status: 'OK'};

// statusObject does not inherit from Quo.prototype, but we can invoke the get_status method on statusObject even though statusObject does not have a get_status method.

var status = Quo.prototype.get_status.apply(statusObject);// status is 'OK'

Page 29: функции в Java script

Это всё, ребята!