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

arguments

08.02.2011, 13:23. Показов 2924. Ответов 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
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
08.02.2011, 15:00
Hagrael, Это специально так и было задумано. Изменение формального параметра изменяет соответствующую запись в arguments и наоборот.
1
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
08.02.2011, 15:29
У объекта Arguments есть одна очень необычная особенность. Когда у функции имеются именованные аргументы, элементы массива объекта Arguments являются синонимами локальных переменных, содержащих аргументы функции. Массив arguments[] и именованные аргументы - это два разных средства обращения к одной переменной. Изменение значения аргумента через имя аргумента меняет значение, извлекаемое через массив arguments[]. Изменение значения аргумента через массив arguments[] меняет значение, извлекаемое по имени аргумента.

Пример:

JavaScript
1
2
3
4
5
function f(x){
  alert(x);
  arguments[0]=null; //изменяя аргумент массива изменяется и x
  alert(x);               //выводит null
}
Определённо это не совсем то поведение, которое можно ожидать от настоящего массива. В этом случае arguments[0] и х могли бы ссылаться на одно и то же значение, но изменение одной ссылки не должно оказывать влияния на другое.
2
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
09.02.2011, 11:53  [ТС]
Значит, это исключение. Большое спасибо за такой подробный рассказ.

Добавлено через 18 часов 3 минуты
Ещё один вопрос, он касается логических операций. Как я понял, при сравнении объектов и функций сравнивается их "url" в ОЗУ, а при сравнении переменных с др. типами сравнивается их значение. Так?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
09.02.2011, 12:31
Hagrael, Если ты емеешь ввиду логическую операцию сравнения то существует два способа сравнения ==(равенство) и ===(идентичность).
В JS числовые, строковые и логические значения сравниваются по значению. В этом случае рассматриваются две различные величины, а операторы == и === проверяют, идентичны ли эти два значения. Это значит, что две переменные равны или идентичны, только если они содержат одинаковое значение. Например, две строки равны, только если обе содержат в точночти одинаковые символы.
В то же время объекты, массивы и функции сравниваются по ссылке. Это значит, что две переменные равны, только если они ссылаются на один объект. Два различных массива не могут быть равными или идентичными даже если они содержат равные или идентичные элементы. Две переменные, содержащие сылки на объекты, массивы или функции, равны, только если они ссылаются на один и тот же объект, массив или функцию.
Основное отличие операторов == и === заключается в том, что === возвращает false если типы двух переменных не совпадают, а == всё же пытается преобразовать один тип к другому.

Пример:
JavaScript
1
2
alert(1=='1');      //  true
alert(1==='1');   //  false
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
09.02.2011, 14:58  [ТС]
Kdn, ещё раз большое спасибо Ещё один маленький вопросик - при перечислении for (prop in obj), где obj - массив, выдаваться будут только его ячейки, да?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
09.02.2011, 15:09
Hagrael, Выдаваться куда? Если ты емеешь ввиду что будет записано в prop, то туда будет передан индекс массива, т.е:

JavaScript
1
2
3
4
5
6
7
8
9
var obj = ['w','e','rrr']
 
for (prop in obj){
    alert("alert = "+prop) 
}
 
//  alert= 0
//  alert= 1
//  alert= 2
1
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
09.02.2011, 16:22
Оператор for..in будет перечислять также свойства прототипа. Для отличия их от собственных свойств есть метод hasOwnProperty
JavaScript
1
2
3
4
5
6
7
Array.prototype.Foo = function(){};
 
var a = [10, 20, 30], k;
for (k in a) {
    alert(k);
};
// Увидим 0, 1, 2, Foo
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
09.02.2011, 17:07  [ТС]
Всё понятно
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
15.02.2011, 13:45  [ТС]
А самому никакими средствами нельзя запретить показ каких-то функций при перечислении в цикле for in?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
15.02.2011, 15:15
Hagrael, Можно попробовать использовать замыкания.
В этом случае внутри объекта класса допустим ты храниш массив функций.
Объект так же имеет одну функцию, скажем getFunction(index) . Она извлекает по индексу функцию.
При вызове for in у данного объекта она покажет лишь getFunction. И Всё.
Ну а если сложнее нужно то можно не по индексу а по имени например замаскировать.

Если не понял, могу пример написать.

Добавлено через 11 минут
Да забыл сказать что такая реализация подойдёт для динамического создания функций.
С наследованием через прототип такое не прокатит
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
15.02.2011, 15:48  [ТС]
Kdn, ну эта реализация очень убогая ИМХО.
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
15.02.2011, 16:57
Hagrael, Я ведь не ясновидящий, и не знаю как и для чего тебе это вообще надо. Просто предлогаю вариант.Предложи лучше =)
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
15.02.2011, 17:01  [ТС]
Kdn, лучше ничего нет
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
16.02.2011, 16:55
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var Class = (function(){
    function bar() {
    }
    
    var C = function(){
        this.foo();
        bar.call(this);
    };
    C.prototype = {
        foo : function() {
        }
    };
    return C;
})();
 
var o = new Class();
Тогда тот bar точно не появится в for..in.
1
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
16.02.2011, 17:18
Vovan-VE, Я ему предлагал использовать замыкания.
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
16.02.2011, 18:13  [ТС]
Vovan-VE, но и извне нельзя будет обратиться к функции bar.
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
16.02.2011, 18:26
Hagrael, нельзя. И у дочернего класса bar так же будет не доступен.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
16.02.2011, 18:30
Цитата Сообщение от Hagrael Посмотреть сообщение
но и извне нельзя будет обратиться к функции bar.
Да, нельзя. Значит никак.
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
17.02.2011, 11:25  [ТС]

Не по теме:

Vovan-VE, Kdn, а если не секрет, вы где-нибудь работаете? Или у вас свои проекты? Просто интересно, куда идет большая часть веб-программистов - на фирмы или создают свои проекты. Хотя последнее, как мне кажется, сделать сложно.



Добавлено через 16 часов 30 минут
А ведь получается, что при вызове функции все ее локальные переменные создаются и остаются в памяти до окончания просмотра страницы, так? Ведь как бы иначе работали замыкания?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2011, 11:25
Помогаю со студенческими работами здесь

Чем заменить 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
Доброго времени суток! Возникла проблема при компиляции кода, собственно на скриншотах ниже, никак не могу ничего придумать, подскажите...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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