27.09.2014, 17:46
|
Интересующийся
|
|
Регистрация: 25.06.2014
Сообщений: 20
|
|
вопросы по учебнику
Здравствуйте. Возникло пару вопросов-собственно вот они:
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()
Последний раз редактировалось extrabass4, 27.09.2014 в 17:54.
|
|
27.09.2014, 18:23
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Функция должна вернуть отрицательное число, если b должно стоять после a, положительное число, если a должно стоять после b и 0, если a и b равны. В общем, да, так и есть.
|
|
27.09.2014, 18:32
|
Интересующийся
|
|
Регистрация: 25.06.2014
Сообщений: 20
|
|
Спасибо за ответ. ТО есть всё основное внимание на параметр функц. a и определение его места по отношению к b элементу ?
|
|
27.09.2014, 20:44
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Да.
|
|
28.09.2014, 17:20
|
Интересующийся
|
|
Регистрация: 25.06.2014
Сообщений: 20
|
|
А при function expression, ведь переменная является ссылкой ?
Последний раз редактировалось extrabass4, 28.09.2014 в 17:33.
|
|
28.09.2014, 18:35
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Объекты в жс передаются по ссылкам. Функция - объект, массив - объект, в общем, все, что не примитив - объект.
|
|
28.09.2014, 23:37
|
Интересующийся
|
|
Регистрация: 25.06.2014
Сообщений: 20
|
|
Сообщение от Erolast
|
Объекты в жс передаются по ссылкам. Функция - объект, массив - объект, в общем, все, что не примитив - объект.
|
А где тогда хранятся все эти функции и объекты (особенно при function expression)? Или же она не хранится, а просто выполняется когда код доходит до этого места и с массивами тоже самое, так ?
Последний раз редактировалось extrabass4, 28.09.2014 в 23:40.
|
|
29.09.2014, 12:57
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
А где тогда хранятся все эти функции и объекты (особенно при function expression)?
|
Очевидно, в той области видимости, в которой объявляются. Но передаются они с помощью ссылок, прямого доступа ты к ним не имеешь. Это удобно, на самом деле.
Цитата:
|
Или же она не хранится, а просто выполняется когда код доходит до этого места и с массивами тоже самое, так ?
|
Нет, она объявляется и хранится, пока ее не удалит сборщик мусора.
|
|
29.09.2014, 22:51
|
Интересующийся
|
|
Регистрация: 25.06.2014
Сообщений: 20
|
|
Сообщение от Erolast
|
Очевидно, в той области видимости, в которой объявляются. Но передаются они с помощью ссылок, прямого доступа ты к ним не имеешь. Это удобно, на самом деле.
Нет, она объявляется и хранится, пока ее не удалит сборщик мусора.
|
Хмм, а вот как тут тогда :
<script>
var a = 0;
var sayH = function() {
var phrase = "Привет";
alert(phrase);
}
</script>
До выполнения кода интерпретатор сохранит в global object(window)
window = { a:undefined, sayH: undefined }
Но, а как тогда заранее создастся LexicalEnvironment для var sayH = function(), если присвоение произойдёт, только когда дойдём до этого участка кода?
И можно поподробнее о сборщике мусора желательно с примером и алгоритмом действия.
Заранее благодарен
Последний раз редактировалось extrabass4, 29.09.2014 в 23:05.
|
|
29.09.2014, 23:46
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от 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
|
И можно поподробнее о сборщике мусора желательно с примером и алгоритмом действия.
|
ссылки на объект закончились, можно удалять
|
|
|
|