С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932

arguments

08.02.2011, 13:23. Показов 2928. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обнаружил наистраннейшую вещь - вот этот код:
JavaScript
1
2
3
4
5
function args(arg1, arg2) {
    arg1={}
    alert(arguments[0])
}
args(10, 50)
выдаёт [object Object]! По какому-такому правилу???

Добавлено через 2 минуты
Хм, это связано со ссылочными переменными. arg1 - ячейка массива, я её изменяю на тип object, а это ссылочный тип... и что-то непонятно... arg1-то не объект по началу и по идее не должен ссылаться...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2011, 13:23
Ответы с готовыми решениями:

Arguments.callee.name
TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for call to...

arguments[] не могу понять что не так
function sum() { var s; for(var i=0;i<arguments.length;i++) s=arguments; return s; } alert(sum(1,2,3,55)) ...

Write a function nextInLine which takes an array (arr) and a number (item) as arguments.
https://www.freecodecamp.org/challenges/stand-in-line Ничего не могу понять. Просят создать функцию с arr и item, но она уже...

31
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
17.02.2011, 11:58
Студворк — интернет-сервис помощи студентам
Все переменные живут ровно столько, чтоб обеспечить правильную работу скрипта. Вообще, идеальная модель исполняющей машины — машина с бесконечной памятью, однако, из-за того, что пока нет таких машин (из существующих), интерпретатор переодически запускает сборщик мусора, который подчищает всю ненужную память. Объект считается недоступным, а ею занимаемая память — ненужной, если нет ни одной ссылки (то есть переменной) на этот объект.
В случае замыкания у нас внутри функции есть обращение к некоторой внешней переменной, поэтому она сохраняется в память.
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
17.02.2011, 12:08
Hagrael, После вызова функции остаётся объект вызова , в котором и хранятся локальные переменные до уничтожения этого объекта.
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
17.02.2011, 12:27  [ТС]
Kdn, объект хранит локальные переменные функции? о_О Это что-то новенькое!
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
17.02.2011, 12:46
Hagrael, Конечно не хранит, бред написал, имеет доступ к локальным переменным.
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
17.02.2011, 12:49  [ТС]
Kdn, так значит, переменные хранятся отдельно, и они существуют бесконечно?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
17.02.2011, 13:07
Если строго следовать правилу лексической области видимости: функция исполняется в той области видимости, в которой она была определена. Однако самое интересное состоит в том, что области видимости продолжают существовать и после выхода из объемлющей функции. В обычной ситуации этого не происходит. Когда вызывается функция, создается объект вызова и азмещается в ее области видимости. Когда функция завершает работу, объект вызова удаляется из цепочки вызова. Пока дело не касается вложенных функций, цепочка видимостиявляется единственной ссылкой на объект вызова. Когда ссылка на объект удаляется из цепочки, в дело вступает сборщик мусора.
Однако ситуация меняется с появлением вложенных функций. Когда создается определение вложенной функции, оно содержит ссылку на объект вызова, поскольку этот объект находится на вершине цепочки областей видимости, в которой определяется функция. Если вложенная функция используется только внутри объемлющей функции, единственная ссылка на вложенную функцию –это объект вызова. Когда внешняя функция возвращает управление, вложенная функция ссылается на объект вызова, а объект вызова – на вложенную функцию, и никаких других ссылок на них не существует, благодаря этому они становятся доступными для механизма сборки мусора.
Все меняется, если ссылка на вложенную функцию сохраняется в глобальной области видимости. Это происходит, когда вложенная функция передается в виде возвращаемого значения объемлющей функции или сохраняется в виде свойства какого-либо другого объекта. В этом случае появляется внешняя ссылка на вложенную функцию, при этом вложенная функция продолжает ссылаться на объект вызова объемлющей функции. В результате все объекты вызова, созданные при каждом таком обращении к объемлющей функции, продолжают свое существование, а вместе с ними продолжают существование имена и значения аргументов функции и локальных переменных. JavaScript-программы не имеют возможности напрямую воздействовать на объект вызова, но его свойства являются частью цепочки областей видимости, создаваемой при любом обращении к вложенной функции. (Примечательно, что если объемлющая функция сохранит глобальные ссылки на две вложенные функции, эти вложенные функции будут совместно использовать один и тот же объект вызова, а изменения, появившиеся в результате обращения к одной из функций, будут видимы в другой.)
Функции в JavaScript представляют собой комбинацию исполняемого программного кода и области видимости, в которой этот код исполняется. Такая комбинация программного кода и области видимости в литературе по компьютерной тематике называется замыканием (closure). Все JS функции являются замыканиями. Однако все эти замыкания представляют интерес лишь в только что рассмотренной ситуации, когда вложенная функция экспортируется за пределы области видимости, в которой она была определена. Вложенные функции, используемые таким образом, нередко явно называют замыканиями.
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
19.02.2011, 13:03  [ТС]
Я так понял:
JavaScript
1
2
3
4
5
6
7
8
function a() {
    var variable
    b=function() {}
}
a(); b()
//Объект создается внутри функции a и имеет доступ к переменной variable, создается объект a.b
//(грубо говоря) если в a.b будут ссылаться на "переменную", которой нет у объекта a.b, то браузер
//смотрит, есть ли она в объекте a etc. Когда удаляется объект a и b, я так и не понял :(
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
function a() {
    var variable
    b=function()  {
        obj={
            getVariable: function() {
                return variable
            }
        }
    }
}
a(); b(); alert(obj.getVariable())
//obj ищет переменную variable в a.b, т.к. там не находит, то он ищет в объекте a
Но когда и что удаляется, не могли бы вы объяснить на примере?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
19.02.2011, 15:00
Hagrael, с педагогической стороны тебе лучше считать, что они не удаляются вовсе до завершения скрипта (т.е. пока включен интерпретатор/браузер).
Удаление объектов описан (ну как описан, скорее, даны некоторые характеристики браузеров) тут: http://habrahabr.ru/blogs/javascript/112650/
В твоих примерах удалений нет, так как в этих участках нет никаких намеков на использование в дальнейшем. Такой вариант:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = function(){var v=1; return arguments.callee.b = function(x){return v=v*x;};}
a()(5);
//вот тут a.b будет определён и переменная v будет жить
//из-за строчки ниже a.b и v удаляются (или не удаляются, ~собсно, who cares?)
var f=a();
//тут a.b и v определены, однако они не имеют никакого отношения к a.b и v, которые були выше
var g=a();
//теперь g===a.b, но f!=g
//тут, кстати, будут жить сразу две переменные v, абсолютно независимые между собою.
f = null
//удаляется (или не удаляется, опять же, who cares?) функция, связанная с f, следовательно, и соотв. v.
g = null;
//ничего не удаляется, осталась a.b
a = null;
//удаляется всё.
P.S. в твоем примере b есть свойство Global Object (window)
P.P.S. перечитай последний пост Kdn
1
19.02.2011, 17:33

Не по теме:

Hagrael, Пиши всегда с ; , скажи бэйсику "нет". Ибо существует механизм автодобавления ; . http://javascript.ru/ecma/part7#a-7.9

0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
19.02.2011, 17:50  [ТС]
Vovan-VE, что за механизм не понял, но буду писать
0
19.02.2011, 18:36

Не по теме:

Цитата Сообщение от Hagrael Посмотреть сообщение
Vovan-VE, что за механизм не понял, но буду писать :)
Да очень простой механизм.
JavaScript
1
2
return
42
на самом деле означает
JavaScript
1
2
return;
42;
а не
JavaScript
1
return 42;
И наоборот:
JavaScript
1
2
a = b + c 
(d + e).print()
на самом деле означает
JavaScript
1
a = b + c(d + e).print();
а не
JavaScript
1
2
a = b + c;
(d + e).print();

1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
20.02.2011, 14:02  [ТС]
Vovan-VE, последний пример все явно продемонстрировал, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2011, 14:02
Помогаю со студенческими работами здесь

Чем заменить arguments.callee?
Есть функция: (function() { alert('example...'); window.setTimeout(arguments.callee, 10000); })(); Всё работает...

NoReverseMatch at / Reverse for 'detail_news' with arguments '('',)' and keyword arguments '{}' not found...
<h2 class="nospace push10"><a href="{% url 'news:detail_news' new.id %}"><span class="icon-arrow-right"></span> {{n_last.title}} </a></h2> ...

Too many output arguments
Помогите найти ошибку. Может я неправильно вызываю функцию? Вызываю так: y = v_18(1,5).Вот код function v_18 (x, n) p=1; x=1; k=1; ...

Error: too many arguments
При отладке показывает на кусок кода: (IF (= J 1) (SETQ TT1 BT ; координаты первого угла офиса TT2 T1 ; координаты...

Too few arguments to function
Доброго времени суток! Возникла проблема при компиляции кода, собственно на скриншотах ниже, никак не могу ничего придумать, подскажите...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru