Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопросы по учебнику (https://javascript.ru/forum/misc/50477-voprosy-po-uchebniku.html)

extrabass4 27.09.2014 17:46

вопросы по учебнику
 
Здравствуйте. Возникло пару вопросов-собственно вот они:
var arr = [1,7,8,3,7,3,22,4]
function compareNumeric(a, b) {
return a - b;
}
sort(compareNumeric);// 1 3 3 4 7 8 22

то есть алгоритм таков
1 - 7, где а это 1, а b это 7. При этом выражение 1-7 результат равен отрицательному числу и а остаётся с левой стороны, но если же было бы положительным, то они бы поменялись местами - таким способом действует эта сортировка ? Алгоритм быстрой сортировки понятен - мне ДО КОНЦА не понятно каким образом действует передаваемая функция в метод sort()

Erolast 27.09.2014 18:23

Функция должна вернуть отрицательное число, если b должно стоять после a, положительное число, если a должно стоять после b и 0, если a и b равны. В общем, да, так и есть.

extrabass4 27.09.2014 18:32

Спасибо за ответ. ТО есть всё основное внимание на параметр функц. a и определение его места по отношению к b элементу ?

Erolast 27.09.2014 20:44

Да.

extrabass4 28.09.2014 17:20

А при function expression, ведь переменная является ссылкой ?

Erolast 28.09.2014 18:35

Объекты в жс передаются по ссылкам. Функция - объект, массив - объект, в общем, все, что не примитив - объект.

extrabass4 28.09.2014 23:37

Цитата:

Сообщение от Erolast (Сообщение 332582)
Объекты в жс передаются по ссылкам. Функция - объект, массив - объект, в общем, все, что не примитив - объект.

А где тогда хранятся все эти функции и объекты (особенно при function expression)? Или же она не хранится, а просто выполняется когда код доходит до этого места и с массивами тоже самое, так ?

Erolast 29.09.2014 12:57

Цитата:

А где тогда хранятся все эти функции и объекты (особенно при function expression)?
Очевидно, в той области видимости, в которой объявляются. Но передаются они с помощью ссылок, прямого доступа ты к ним не имеешь. Это удобно, на самом деле.
Цитата:

Или же она не хранится, а просто выполняется когда код доходит до этого места и с массивами тоже самое, так ?
Нет, она объявляется и хранится, пока ее не удалит сборщик мусора.

extrabass4 29.09.2014 22:51

Цитата:

Сообщение от Erolast (Сообщение 332636)
Очевидно, в той области видимости, в которой объявляются. Но передаются они с помощью ссылок, прямого доступа ты к ним не имеешь. Это удобно, на самом деле.

Нет, она объявляется и хранится, пока ее не удалит сборщик мусора.

Хмм, а вот как тут тогда :
<script>
var a = 0;
var sayH = function() {
var phrase = "Привет";
alert(phrase);
}

</script>

До выполнения кода интерпретатор сохранит в global object(window)
window = { a:undefined, sayH: undefined }
Но, а как тогда заранее создастся LexicalEnvironment для var sayH = function(), если присвоение произойдёт, только когда дойдём до этого участка кода?


И можно поподробнее о сборщике мусора желательно с примером и алгоритмом действия.
Заранее благодарен

bes 29.09.2014 23:46

Цитата:

Сообщение от extrabass4
ведь переменная является ссылкой

переменная является переменной, является абстракцией и хранит значения, смысл которых (для человека) интерпретируется в соответствии с алгоритмами, описанными в спецификации

Цитата:

Сообщение от extrabass4
А где тогда хранятся все эти ... объекты

в переменной можно хранить значения-ссылки на объекты, сами объекты хранятся в куче (heap)

Цитата:

Сообщение от extrabass4
Но, а как тогда заранее создастся LexicalEnvironment для var sayH = function(), если присвоение произойдёт, только когда дойдём до этого участка кода?

http://es5.javascript.ru/x11.html#x11.13.1
Цитата:

Для вычисления AssignmentExpression : LeftHandSideExpression = AssignmentExpression выполняются следующие шаги:

1. Пусть lref будет результатом вычисления LeftHandSideExpression ("Левосторонее выражение").
2. Пусть rref будет результатом вычисления AssignmentExpression.
на 2 шаге и определится в каком окружении находится функция

Цитата:

Сообщение от extrabass4
И можно поподробнее о сборщике мусора желательно с примером и алгоритмом действия.

ссылки на объект закончились, можно удалять


Часовой пояс GMT +3, время: 13:25.