28.07.2013, 22:28
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Создание примитива с таким же именем как у уже существующего свойства функции
В примере ниже операция ++ сработает на локальной переменной test, а не на свойстве test объекта функции. Потому что test новая переменная, которая получила значение свойства, но никак не является ссылкой на свойство.
function test(){
var test = arguments.callee.test;
test++;
}
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
|
|
28.07.2013, 23:51
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от lancer
|
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
|
ты о чём вообще
локальная переменная будет хранить то, что ей присвоили, иначе undefined
написав arguments.callee.test ты уже обращаешься к свойству, в приведённом примере туда ляжет undefined (если ранее присвоишь другое значение, то оно)
http://es5.javascript.ru/x8.html#x8.12
Цитата:
|
При вызове внутреннего метода [[GetOwnProperty]] объекта O с именем свойства P выполняются следующие шаги:
1. Если у O нет собственного свойства с именем P, вернуть undefined.
...
|
|
|
29.07.2013, 00:47
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от lancer
|
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
|
слова: объект вызова о чём то говорят?
|
|
29.07.2013, 01:04
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Ну да, arguments.callee.test = 1, это аналогично var test = 1;
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.
Если что тут, хотя как по мне вопрос исчерпан.
функции-объекты
dmitriymar, твой минус мне в карму "учи основы", так я их и учу, и не моя вина что в учебнике опечатка. Не хочешь помогать - не надо.
Последний раз редактировалось lancer, 29.07.2013 в 01:08.
|
|
29.07.2013, 03:30
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от lancer
|
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test.
|
Все правильно написано в учебнике. Так и есть.
Сообщение от lancer
|
Я че и подумал, как могут быть два test.
|
А почему нет? Ты создал локальную переменную test, у которой тут же задал начальное значение, равное значению arguments.callee.test.
Операции над test никак не повлияют на arguments.callee.test (с чего бы это)?
|
|
29.07.2013, 09:15
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от lancer
|
так я их и учу, и не моя вина что в учебнике опечатка
|
Нет там опечатки , учи основы , выучи что передаётся по ссылке , а что по значению и прочие основы и вопросов не будет и обвинений в "опечатках" . ты 5 лет на форуме
Сообщение от lancer
|
Не хочешь помогать - не надо.
|
-чувак это ты не хочешь вдумываться в то что тебе говорят, и изучить основы наконец
чего стоит "Создание примитива с таким же именем как у уже существующего свойства функции" -что такое примитив? что это за термин ?
Последний раз редактировалось dmitriymar, 29.07.2013 в 09:19.
|
|
29.07.2013, 19:07
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Сообщение от danik.js
|
Сообщение от lancer
|
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.
|
Все правильно написано в учебнике. Так и есть.
|
Ниже этого раздела пишется, что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee. Ничего и не говориться потому что про них и выше как раз пример с arguments.callee - а раз ничего не говориться, я и сделал такие выводы.
dmitriymar, конечно спасибо за советы про что почитать, но не надо раньше времени делать выводы, учебник кривовато написан, об этом и в комментариях многие говорят. Насчет 5 лет - так 4 из них почти им не занимался.
Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет. Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля.
Плохо, что понимаешь это когда уже намучаешься с недельку с сухим материалом и переспросишь по 10 раз очевидные детали.
Последний раз редактировалось lancer, 29.07.2013 в 19:47.
|
|
29.07.2013, 20:23
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от lancer
|
что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee
|
ох-й вывод, самому не смешно
Сообщение от lancer
|
Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет
|
нет, lancer, учебник как раз не плохой, додумывать надо меньше подобным образом, а додуманное проверять
Сообщение от lancer
|
Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля
|
вот тебе ближайший учебник http://es5.javascript.ru/, так как это исходный источник того, как должны работать основные конструкции языка (хотя лучше почитать в оригинале)
|
|
|
|