JavaScript. Разработка мобильных приложений. (Лекция 6) презентация

Содержание

Слайд 2

Функции Зачастую нам надо повторять одно и то же действие

Функции

Зачастую нам надо повторять одно и то же действие во многих

частях программы.
Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными «строительными блоками» программы.
Слайд 3

Объявление функции function имя(параметры) { ...тело функции... } function showMessage() { alert( 'Всем привет!' ); }

Объявление функции

function имя(параметры) {
  ...тело функции...
}
function showMessage() {
  alert( 'Всем привет!' );
}

Слайд 4

Вызов функции function showMessage() { alert( 'Всем привет!' ); } showMessage(); showMessage();

Вызов функции

function showMessage() {
  alert( 'Всем привет!' );
}
showMessage();
showMessage();

Слайд 5

Локальные переменные Переменные, объявленные внутри функции, видны только внутри этой функции.

Локальные переменные

Переменные, объявленные внутри функции, видны только внутри этой функции.

Слайд 6

function showMessage() { let message = "Привет, я JavaScript!"; //

function showMessage() {
  let message = "Привет, я JavaScript!"; // локальная переменная   alert( message );
} showMessage(); // Привет, я JavaScript! alert( message ); 
// будет ошибка, т.к. переменная видна 
// только внутри функции

Слайд 7

Внешние переменные У функции есть доступ к внешним переменным. Функция

Внешние переменные

У функции есть доступ к внешним переменным.
Функция обладает полным доступом

к внешним переменным и может изменять их значение.
Слайд 8

let userName = 'Вася'; function showMessage() { userName = "Петя";

let userName = 'Вася';
function showMessage() {
  userName = "Петя"; 
  // (1) изменяем значение внешней переменной
  let message = 'Привет, ' + userName;
  alert(message);
}
alert( userName ); // Вася перед вызовом функции
showMessage();
alert( userName ); // Петя, значение внешней 
// переменной было изменено функцией

Слайд 9

Параметры (аргументы) Позволяют передать внутрь функции любую информацию, используя параметры (также называемые аргументы функции).

Параметры (аргументы)

Позволяют передать внутрь функции любую информацию, используя параметры (также называемые

аргументы функции).
Слайд 10

function showMessage(from, text) { // аргументы: from, text alert(from +

function showMessage(from, text) { 
// аргументы: from, text
  alert(from + ': ' + text);
}
showMessage('Аня', 'Привет!’); 
// Аня: Привет!
showMessage('Аня', "Как дела?"); 
// Аня: Как дела?

Слайд 11

Функция всегда получает только копию значения

Функция всегда получает только копию значения

Слайд 12

function showMessage(from, text) { from = '*' + from +

function showMessage(from, text) {   from = '*' + from + '*’; 
// немного украсим "from"   alert( from + ': ' + text );
} let from = "Аня"; showMessage(from, "Привет"); // *Аня*: Привет // значение "from" осталось прежним, 
// функция изменила значение локальной переменной
alert( from ); // Аня

Слайд 13

Параметры по умолчанию Если параметр не указан, то его значением становится undefined. showMessage("Аня"); Аня: undefined

Параметры по умолчанию

Если параметр не указан, то его значением становится undefined.
showMessage("Аня");

Аня:

undefined
Слайд 14

function showMessage(from, text = "текст не добавлен") { alert( from

function showMessage(from, text = "текст не добавлен") {
  alert( from + ": " + text );
}
showMessage("Аня"); 

Аня: текст не добавлен

Слайд 15

Function Declaration (Объявление функции) function sayHi() { alert( "Привет" ); }

Function Declaration (Объявление функции)

function sayHi() {
  alert( "Привет" );
}

Слайд 16

Function Expression (Функциональное выражение) let sayHi = function() { alert( "Привет" ); };

Function Expression (Функциональное выражение)

let sayHi = function() {
  alert( "Привет" );
};

Слайд 17

Без разницы, как определили функцию, это просто значение, хранимое в

Без разницы, как определили функцию, это просто значение, хранимое в переменной.
Смысл

обоих примеров кода одинаков: "создать функцию и поместить её значение в переменную.
Слайд 18

function sayHi() { alert( "Привет" ); } alert( sayHi ); // выведет код функции

function sayHi() {
  alert( "Привет" );
} alert( sayHi ); // выведет код функции

Слайд 19

Если после имени функции нет круглых скобок, то её вызова

Если после имени функции нет круглых скобок, то её вызова не

произойдёт
В JavaScript функции – это значения, поэтому мы и обращаемся с ними, как со значениями.
Можно даже скопировать функцию в другую переменную.
Слайд 20

function sayHi() { // создаём alert( "Привет" ); } let

function sayHi() {   // создаём
  alert( "Привет" );
}
let func = sayHi;    // копируем
func(); // Привет    
// вызываем копию (работает)!
sayHi(); // Привет   
// прежняя тоже работает (почему бы нет)

Слайд 21

Функции-«колбэки» Это процесс передачи функций как значений (аргументов)

Функции-«колбэки»

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

Слайд 22

function ask(question, yes, no) { if (confirm(question)) yes() else no();

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}
function showOk() {
  alert( "Вы согласны." );
}
function showCancel() {
  alert( "Вы отменили выполнение." );
}
// использование: функции showOk, showCancel передаются 
// в качестве аргументов ask
ask("Вы согласны?", showOk, showCancel);

Слайд 23

Аргументы функции ещё называют функциями-колбэками или просто колбэками. Ключевая идея

Аргументы функции ещё называют функциями-колбэками или просто колбэками.
Ключевая идея в том,

что мы передаём функцию и ожидаем, что она вызовется обратно (от англ. «call back» – обратный вызов) когда-нибудь позже, если это будет необходимо.
Слайд 24

Колбэк с использованием функционального выражения function ask(question, yes, no) {

Колбэк с использованием функционального выражения

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}
ask(
  "Вы согласны?",
  function() { alert("Вы согласились."); },
  function() { alert("Вы отменили выполнение."); }
);

Слайд 25

Отличия Function Declaration от Function Expression. Function Declaration: функция объявляется

Отличия Function Declaration от Function Expression.

Function Declaration: функция объявляется отдельной конструкцией

«function…» в основном потоке кода.
function sum(a, b) {
  return a + b;
}
Function Expression: функция, созданная внутри другого выражения или синтаксической конструкции
let sum = function(a, b) {
  return a + b;
};
Слайд 26

Function Expression создаётся, когда выполнение доходит до него, и затем

Function Expression создаётся, когда выполнение доходит до него, и затем уже

может использоваться.
Function Declaration можно использовать во всем скрипте (или блоке кода, если функция объявлена в блоке).
Слайд 27

Функция sayHi была создана, когда движок JavaScript подготавливал скрипт к

Функция sayHi была создана, когда движок JavaScript подготавливал скрипт к выполнению,

и такая функция видна повсюду в этом скрипте.
sayHi("Вася"); // Привет, Вася
function sayHi(name) {
  alert( `Привет, ${name}` );
}
Слайд 28

Функции, объявленные при помощи Function Expression, создаются тогда, когда выполнение

Функции, объявленные при помощи Function Expression, создаются тогда, когда выполнение доходит

до них.
sayHi("Вася"); // ошибка!
let sayHi = function(name) {  
// магии больше нет
  alert( `Привет, ${name}` );
};
Слайд 29

Когда Function Declaration находится в блоке {...}, функция доступна везде

Когда Function Declaration находится в блоке {...}, функция доступна везде внутри

блока. Но не снаружи него.

let age = prompt("Сколько Вам лет?", 18);
// в зависимости от условия объявляем функцию
if (age < 18) {
  function welcome() {
    alert("Привет!");
  }
} else {
  function welcome() {
    alert("Здравствуйте!");
  }
}
welcome(); // Error: welcome is not defined

Слайд 30

Когда использовать Function Declaration, а когда Function Expression? В большинстве

Когда использовать Function Declaration, а когда Function Expression?

В большинстве случаев, когда

нам нужно создать функцию, предпочтительно использовать Function Declaration, т.к. функция будет видима до своего объявления в коде. Это позволяет более гибко организовывать код, и улучшает его читаемость.
Таким образом, мы должны прибегать к объявлению функций при помощи Function Expression в случае, когда синтаксис Function Declaration не подходит для нашей задачи.
Слайд 31

Функции-стрелки Существует ещё более простой и краткий синтаксис для создания

Функции-стрелки

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

часто лучше, чем синтаксис Function Expression.
let func = (arg1, arg2, ...argN) => expression
let func = function(arg1, arg2, ...argN) {
  return expression;
};
Слайд 32

let sum = (a, b) => a + b; /*

let sum = (a, b) => a + b;
/* Более короткая форма для:
let sum = function(a, b) {
  return a + b;
};
*/
alert( sum(1, 2) ); // 3

Слайд 33

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

Если у нас только один аргумент, то круглые скобки вокруг параметров

можно опустить, сделав запись ещё короче:
// тоже что и
// let double = function(n) { return n * 2 }
let double = n => n * 2;
alert( double(3) ); // 6
Слайд 34

Если нет аргументов, указываются пустые круглые скобки: let sayHi = () => alert("Hello!"); sayHi();

Если нет аргументов, указываются пустые круглые скобки:
let sayHi = () => alert("Hello!");
sayHi();

Слайд 35

Функции-стрелки могут быть использованы так же, как и Function Expression.

Функции-стрелки могут быть использованы так же, как и Function Expression.
let age = prompt("Сколько Вам лет?", 18);
let welcome = (age < 18) ?
  () => alert('Привет') :
  () => alert("Здравствуйте!");
welcome(); // теперь всё в порядке

Слайд 36

Многострочные стрелочные функции let sum = (a, b) => {

Многострочные стрелочные функции

let sum = (a, b) => {  
// фигурная скобка, открывающая тело многострочной функции
  let result = a + b;
  return result; 
// при фигурных скобках для возврата значения 
// нужно явно вызвать return
};
alert( sum(1, 2) ); // 3

Слайд 37

Объекты (Objects) Объекты используются для хранения коллекций различных значений и

Объекты (Objects)

Объекты используются для хранения коллекций различных значений и более сложных

сущностей. В JavaScript объекты используются очень часто, это одна из основ языка.
Слайд 38

Объект может быть создан с помощью фигурных скобок {…} с

Объект может быть создан с помощью фигурных скобок {…} с необязательным

списком свойств. Свойство – это пара «ключ: значение», где ключ – это строка (также называемая «именем свойства»), а значение может быть чем угодно.
Слайд 39

Слайд 40

// синтаксис "конструктор объекта" let user = new Object(); //

// синтаксис "конструктор объекта"
let user = new Object(); 
// синтаксис "литерал объекта"
let user = {};

Слайд 41

Обычно используют вариант с фигурными скобками {...}. Такое объявление называют литералом объекта или литеральной нотацией.

Обычно используют вариант с фигурными скобками {...}. Такое объявление называют литералом

объекта или литеральной нотацией.
Слайд 42

Литералы и свойства let user = { // объект //

Литералы и свойства

let user = {     // объект
// под ключом "name" хранится значение "John"
  name: "John",   
// под ключом "age" хранится значение 30 
age: 30       
};

Слайд 43

У каждого свойства есть ключ (также называемый «имя» или «идентификатор»).

У каждого свойства есть ключ (также называемый «имя» или «идентификатор»). После

имени свойства следует двоеточие ":", и затем указывается значение свойства. Если в объекте несколько свойств, то они перечисляются через запятую.
Слайд 44

Слайд 45

Для обращения к свойствам используется запись «через точку»: alert( user.name

Для обращения к свойствам используется запись «через точку»:
alert( user.name ); // John
alert( user.age ); // 30

Слайд 46

Значение может быть любого типа. user.isAdmin = true;

Значение может быть любого типа.
user.isAdmin = true;

Слайд 47

Для удаления свойства используется оператор delete: delete user.age;

Для удаления свойства используется оператор delete:
delete user.age;

Слайд 48

Имя свойства может состоять из нескольких слов, но тогда оно

Имя свойства может состоять из нескольких слов, но тогда оно должно

быть заключено в кавычки:
let user = {
  name: "John",
  age: 30,
  "likes birds": true 
};
Слайд 49

Слайд 50

Для свойств, имена которых состоят из нескольких слов, доступ к

Для свойств, имена которых состоят из нескольких слов, доступ к значению

«через точку» не работает:
let user = {};
// присваивание значения свойству
user["likes birds"] = true;
// получение значения свойства
alert(user["likes birds"]); // true
// удаление свойства
delete user["likes birds"];
Слайд 51

Квадратные скобки также позволяют обратиться к свойству, имя которого может

Квадратные скобки также позволяют обратиться к свойству, имя которого может быть

результатом выражения. Например, имя свойства может храниться в переменной:
let key = "likes birds"; // то же самое, что и user["likes birds"] = true;
user[key] = true;
Слайд 52

Вычисляемые свойства Можно использовать квадратные скобки в литеральной нотации для создания вычисляемого свойства.

Вычисляемые свойства

Можно использовать квадратные скобки в литеральной нотации для создания вычисляемого

свойства.
Слайд 53

let fruit = prompt("Какой фрукт купить?", "apple"); let bag =

let fruit = prompt("Какой фрукт купить?", "apple");
let bag = {
  [fruit]: 5, 
// имя свойства будет взято из переменной fruit
};
alert( bag.apple ); // 5, если fruit="apple"

Слайд 54

Зарезервированные слова разрешено использовать как имена свойств let obj =

Зарезервированные слова разрешено использовать как имена свойств

let obj = {
  for: 1,
  let: 2,
  return: 3
};
alert( obj.for + obj.let + obj.return );  // 6

Слайд 55

Свойство из переменной В реальном коде часто нам необходимо использовать

Свойство из переменной

В реальном коде часто нам необходимо использовать существующие переменные

как значения для свойств с тем же именем.
function makeUser(name, age) {
  return {
    name: name,
    age: age
    // ...другие свойства
  };
}
let user = makeUser("John", 30);
alert(user.name); // John
Слайд 56

Если названия свойств и переменных совпадают можно использовать сокращённую запись

Если названия свойств и переменных совпадают можно использовать сокращённую запись
function makeUser(name, age) {
  return {
    name, // то же самое, что и name: name
    age   // то же самое, что и age: age
    // ...
  };
}

Слайд 57

Проверка существования свойства Особенность объектов в том, что можно получить

Проверка существования свойства

Особенность объектов в том, что можно получить доступ к

любому свойству. Даже если свойства не существует – ошибки не будет! При обращении к свойству, которого нет, возвращается undefined.
Чтобы проверить существование свойства достаточно сравнить его с undefined.
Слайд 58

let user = {}; alert( user.noSuchProperty === undefined ); // true означает "свойства нет"

let user = {};
alert( user.noSuchProperty === undefined ); 
// true означает "свойства нет"

Слайд 59

Также существует специальный оператор "in" для проверки существования свойства в

Также существует специальный оператор "in" для проверки существования свойства в объекте.

Слева от оператора in должно быть имя свойства
"key" in object
let user = { name: "John", age: 30 }; alert( "age" in user ); 
// true, user.age существует
alert( "blabla" in user ); 
// false, user.blabla не существует
Слайд 60

let user = { age: 30 }; let key =

let user = { age: 30 };
let key = "age";
alert( key in user ); 
// true, имя свойства было 
// взято из переменной key

Слайд 61

Цикл «for…in» Для перебора всех свойств объекта используется цикл for..in

Цикл «for…in»

Для перебора всех свойств объекта используется цикл for..in
for (key in object) {
  // тело цикла выполняется 
// для каждого свойства объекта
}

Слайд 62

let user = { name: "John", age: 30, isAdmin: true

let user = {
  name: "John",
  age: 30,
  isAdmin: true
};
for (let key in user) {
  // ключи
  alert( key );  // name, age, isAdmin
  // значения ключей
  alert( user[key] ); // John, 30, true
}

Слайд 63

Копирование по ссылке Одним из фундаментальных отличий объектов от примитивных

Копирование по ссылке

Одним из фундаментальных отличий объектов от примитивных типов данных

является то, что они хранятся и копируются «по ссылке».
Примитивные типы: строки, числа, логические значения – присваиваются и копируются «по значению».
Слайд 64

let message = "Hello!"; let phrase = message; В результате

let message = "Hello!";
let phrase = message;
В результате мы имеем две независимые переменные, каждая из которых хранит

строку "Hello!"
Слайд 65

Объекты ведут себя иначе. Они хранят не сам объект, а

Объекты ведут себя иначе.
Они хранят не сам объект, а его «адрес

в памяти», другими словами «ссылку» на него.
Слайд 66

let user = { name: "John" };

let user = {
  name: "John"
};

Слайд 67

Сам объект хранится где-то в памяти. А в переменной user

Сам объект хранится где-то в памяти. А в переменной user лежит

«ссылка» на эту область памяти.
Когда переменная объекта копируется – копируется ссылка, сам же объект не дублируется.
Слайд 68

let user = { name: "John" }; let admin = user; // копируется ссылка

let user = { name: "John" };
let admin = user; // копируется ссылка

Слайд 69

Сравнение объектов Операторы равенства == и строгого равенства === для

Сравнение объектов

Операторы равенства == и строгого равенства === для объектов работают

одинаково.
Два объекта равны только в том случае, если это один и тот же объект.
Слайд 70

let a = {}; let b = a; // копирование

let a = {};
let b = a; // копирование по ссылке
alert( a == b ); 
alert( a === b );

true

true

Слайд 71

let a = {}; let b = {}; // два

let a = {};
let b = {}; // два независимых объекта
alert( a == b );

false

Слайд 72

Объект, объявленный через const, может быть изменён. const user =

Объект, объявленный через const, может быть изменён.

const user = {
  name: "John"
};
user.age = 25;  // (*) alert(user.age); // 25

Слайд 73

объявление const защищает от изменений только само значение user. А

объявление const защищает от изменений только само значение user. А в

нашем случае значение user – это ссылка на объект, и это значение мы не меняем. В строке (*) мы действуем внутри объекта, мы не переназначаем user
Слайд 74

Клонирование и объединение объектов, Object.assign Нужно создавать новый объект и

Клонирование и объединение объектов, Object.assign

Нужно создавать новый объект и повторять структуру

дублируемого объекта, перебирая его свойства и копируя их.
Слайд 75

let user = { name: "John", age: 30 }; let

let user = {
  name: "John",
  age: 30
};
let clone = {}; // новый пустой объект
// скопируем все свойства user в него
for (let key in user) {
  clone[key] = user[key];
}
// теперь в переменной clone находится абсолютно независимый клон объекта.
clone.name = "Pete"; // изменим в нём данные
alert( user.name ); 
// в оригинальном объекте значение свойства `name` осталось прежним – John.

Слайд 76

Object.assign(dest, [src1, src2, src3...]) Аргументы dest, и src1, ..., srcN

Object.assign(dest, [src1, src2, src3...])
Аргументы dest, и src1, ..., srcN (может быть столько, сколько нужно)

являются объектами.
Метод копирует свойства всех объектов src1, ..., srcN в объект dest. То есть, свойства всех перечисленных объектов, начиная со второго, копируются в первый объект. После копирования метод возвращает объект dest.
Если принимающий объект уже имеет свойство с таким именем, оно будет перезаписано.
Слайд 77

let user = { name: "John" }; // свойство name

let user = { name: "John" };
// свойство name перезапишется, 
// свойство isAdmin добавится
Object.assign(user, { name: "Pete", isAdmin: true });
// now user = { name: "Pete", isAdmin: true }

Имя файла: JavaScript.-Разработка-мобильных-приложений.-(Лекция-6).pptx
Количество просмотров: 95
Количество скачиваний: 0