Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
1

Изменения поведения функции при использования function expression

06.05.2018, 14:18. Показов 810. Ответов 12
Метки нет (Все метки)

Кто-нибудь, объясните, пожалуйста, что автор имеет ввиду:
Изменения поведения функции при использования function expression
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2018, 14:18
Ответы с готовыми решениями:

FUN must be a function, a valid string expression, or an inline function object
Здраствуйте, нужна помощь. clear all; close all; Scr_data_C; Scr_data_L; fv = 10:10:10000;...

Математический анализ поведения функции при заданных значения аргумента(табулирование функции)
Условие: составить алгоритм и программу вычисления: -исследовать методами математического анализа...

Expression syntax in function bh()
x=(d++ y+ + -2*c+777)/ 7; ошибку выдает после квадратных скобками ; подскажите что делать ?

Expression sytax in function main
Компилятор Borland Turbo C 2.01. При попытке компиляции выдает ошибку: 10 (строка): Expression...

12
23 / 16 / 7
Регистрация: 17.10.2012
Сообщений: 74
06.05.2018, 15:26 2
Автор говорит про такую особенность JS , как поднятие (hoisting). Поднятий для функционального выражения и функционального определения работает по-разному.

Попробуйте погуглить «js hoisting” , описывается практически во всех источниках более чем доступно. Если что-то дальше будет не понятно, пишите сюда, будем вместе разбираться
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
06.05.2018, 15:34  [ТС] 3
froziq, про hoisting я знаю, но автор же в предыдущем приложении пишет что hoisting для function expression не применяется. Он применяется для function declaration.

Былы бы отлично, если бы кто-то привел пример того, как код до function expression может изменить алгоритм выполнения этой функции.
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2143 / 1489 / 651
Регистрация: 16.04.2016
Сообщений: 3,695
06.05.2018, 15:40 4
Artmal, имеется ввиду, что интерпретатор не создает function expression до выполнения кода, как он это делает с function declaration. То есть FE можно переопределить до выполнения по-любому, ведь эта функция имеет ссылку на себя. Поясняю, возьмем пример от Кантора(он первый попался) -
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
"use strict";
var age = 35;
if (age >= 18) {
  function sayHi() {
    alert( 'Прошу вас!' );
  }
} else {
  function sayHi() {
    alert( 'До 18 нельзя' );
  }
}
sayHi();
В консоли у Вас будет ошибка Uncaught ReferenceError: sayHi is not defined

Но стоит сделать так
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
"use strict";
var age = 35,sayHi;
if (age >= 18) {
  sayHi = function () {
    alert( 'Прошу вас!' );
  }
} else {
  sayHi = function () {
    alert( 'До 18 нельзя' );
  }
}
sayHi();
и алерт выдаст Вам сообщение.
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
06.05.2018, 16:01  [ТС] 5
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
То есть FE можно переопределить до выполнения по-любому, ведь эта функция имеет ссылку на себя.
Можно и function declaration переопределять:
Javascript
1
2
3
4
5
6
7
8
9
function sayMyName() {
  console.log("Artmal");
}
 
function sayMyName() {
  console.log("Artmal+");
}
 
sayMyName(); //Artmal+
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
В консоли у Вас будет ошибка Uncaught ReferenceError: sayHi is not defined
Ну так понятно, эта функция просто не находится в скоупе, в котором она вызывается.


Как я понял, конкретно в вашем примере мы используем function expression для того чтобы не выкидывать в global scope функции, которые будут использоваться только в этом коде.
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2143 / 1489 / 651
Регистрация: 16.04.2016
Сообщений: 3,695
06.05.2018, 16:05 6
Artmal,
Цитата Сообщение от Artmal Посмотреть сообщение
Ну так понятно, эта функция просто не находится в скоупе, в котором она вызывается.
ну так в этом и прикол

Добавлено через 1 минуту
Поэтому автор и написал -
it also means that any code that appears up to that point could potentially alter what goes on inside this function
Добавлено через 48 секунд
Или в чем вопрос был? Может я не догнал?
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
06.05.2018, 16:09  [ТС] 7
Qwerty_Wasd, та я просто не понимаю, о чем хочет сказать автор. В моем понимании, он говорит о том, что в переменной могут быть разные функции. Функции то мы никак не меняем(они просто разные), мы просто их как объекты приваиваем одной переменной. Нет?
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2143 / 1489 / 651
Регистрация: 16.04.2016
Сообщений: 3,695
06.05.2018, 16:14 8
Artmal, переменная становится ссылкой на функцию, таким образом, изменив по ссылке содержимое, мы переопределяем эту функцию. Еще раз обращаю внимание --> ссылка, не копия
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
06.05.2018, 16:22  [ТС] 9
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
изменив по ссылке содержимое, мы переопределяем эту функцию
А можно пример как мы можем переопределить функцию по ссылке, а не просто присвоить другую функцию этой переменной?

Вот я ссылку передал другой переменной, переопредилил переменную и по ссылке ничего не менялось:
Javascript
1
2
3
4
5
6
7
8
9
10
11
var foo = function() {
  console.log("foo");
}
 
var bar = foo;
 
foo = function () {
  console.log("foo after");
}
 
bar(); //foo
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2143 / 1489 / 651
Регистрация: 16.04.2016
Сообщений: 3,695
06.05.2018, 16:28 10
Точно также, мы получаем ссылки на объект, изменяем его содержимое через ссылку.
Javascript
1
2
3
4
var a={x:1},b;
b=a;
b.x=2
alert(a.x)
Добавлено через 2 минуты
Artmal, я его уже привел. Переопределил анонимную функцию.

Добавлено через 1 минуту
Пожалуйста
Javascript
1
2
3
4
5
6
7
8
9
10
11
var foo = function() {
  console.log("foo");
}
foo = function () {
  console.log("foo after");
}
var bar = foo;
 
 
 
bar();
Добавлено через 1 минуту
Вы, чтобы понимать, приучите себя переводить на человеческий язык свой же код
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
06.05.2018, 16:31  [ТС] 11
Qwerty_Wasd
Цитата Сообщение от Artmal Посмотреть сообщение
Вот я ссылку передал другой переменной, переопредилил переменную и по ссылке ничего не менялось:
Разве этот код явно не показывает, что вы ничего не переопределяете, а просто присваиваете новую функцию переменной? По вашей логике, должно же было напечататься foo after, т.к bar ссылается на функцию, которую я переопределил.
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2143 / 1489 / 651
Регистрация: 16.04.2016
Сообщений: 3,695
06.05.2018, 16:46 12
Artmal, повторяю
Вы, чтобы понимать, приучите себя переводить на человеческий язык свой же код
к примеру Ваш код
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
//определяем ссылку foo на следующую ф-ю
var foo = function() {
  console.log("foo");
}
//определяем и присваиваем переменной bar ссылку foo, делая ее тем самым такой же ссылкой на анонимную ф-ю по ссылке foo, теперь их две -> foo и bar
var bar = foo;
 // переопределяем ф-ю по ссылке foo, теперь foo ссылается на эту ф-ю, а bar на предыдущую
foo = function () {
  console.log("foo after");
}
 //выводим функцию по ссылку bar, то есть console.log("foo");
bar(); //foo
Ну а теперь мой
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
//определяем ссылку foo на следующую ф-ю
var foo = function() {
  console.log("foo");
}
// переопределяем ф-ю по ссылке foo, теперь foo ссылается на эту ф-ю
foo = function () {
  console.log("foo after");
}
//определяем и присваиваем переменной bar ссылку foo, делая ее тем самым такой же ссылкой на анонимную ф-ю по ссылке foo, теперь их две -> foo и bar
var bar = foo; 
//выводим функцию по ссылку bar, то есть console.log("foo after");
bar();
Добавлено через 3 минуты
Или переопределить надо было так -
Javascript
1
2
3
4
5
6
7
8
var foo = function() {
  console.log("foo");
}
var bar= function () {
  console.log("foo after");
}
foo=bar;
foo();
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,098
07.05.2018, 09:04  [ТС] 13
Мне кажется вы сами для себя придумали понятие переопределение. Погуглите в интернете, об переопределении практически везде говорят в контексте полиморфизма и я нигде не нашел чтобы этим называли присваивание нового значения переменной.

Переопределение анонимной функции туда же.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2018, 09:04

Функция в SQL, ругается 'Undefined function 'func' in expression'.
На урвне модуля описал функцию func(i1,i1i3) и пытаюсь ея сунуть в 'select...

Error 'a return expression required in a function with a block body'
Почему появляется данная ошибка и как ее исправить? Текст ошибки: a return expression required in a...

E2188 Expression syntax в при указании опции loCaseInsensitive в функции Locate
Пытаюсь сделать поиск, но в данной строке кода ругается на Unit1.cpp(21): E2188 Expression...

Выбор точек на плоскости: Expected expression before 'float' и too few arguments to function 'pow'
Сама задача звучит так: Из заданного на плоскости множества точек выбрать три различные точки так,...

Ошибка: Function definition is not allowed here и Expected expression среда xCode forMacOS
Не могу устранить ошибки. Что я сделал не так? ссылка на скрин ошибки1, и ошибки2 #include...

Исследование поведения функции
Исследовать поведение функции sqrt(a,e) при отрицательных значениях a. Изменить программу так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru