|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
||||||||||||||||||||||||||||||||||||
сюда буду скидывать все интересующие меня тонкости, которые будут возникать по мере изучения JavaScript10.08.2013, 14:36. Показов 1057. Ответов 13
Метки нет (Все метки)
Как мы знаем функция обертка
Как я понял, это делается для модулей, имена переменных которых, могут совпадать с вашими собственными. Так вот хотелось бы знать, зачем мы оборачиваем
Так же второй вопрос: как получить доступ, к функции внутри функции? Скажем есть функция:
К примеру если функция является свойством объекта, то можно вызвать её как метод:
0
|
||||||||||||||||||||||||||||||||||||
| 10.08.2013, 14:36 | |
|
Ответы с готовыми решениями:
13
Как создавать файлы, которые будут подгружаться по мере обращения к ним? У меня все никак не получается найти ошибку в коде( Буду признателен, если поможете! Необходимо определить переменную которой по мере работы кода я буду присваивать разные классы |
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 10.08.2013, 17:41 | |
|
1. вы не поняли сути "обёртки"
определение функции - это декларативный код, интерпретатором не выполняющийся чтобы запустить эту функцию (и исполнить код, внутри неё написанный), надо прописать имя этой функции и добавить к ней пару круглых скобок в любом случае имя этой функции остаётся свойством объекта window и только оно одно, а не выдуманный вами какой-то "блок переменных" вот чтобы даже это одно имя функции не конфликтовало с другими кодами (вдруг какой-то ещё код использует такое же имя для своей глобальной переменной), и придумана "обёртка", которая запускает на исполнение безымянную функцию т.е. два кода сделают одно и то же: function myFunc () {alert (123)}; myFunc (); и (function () {alert (123)}) (); но в первом случае у окна останется свойство-функция myFunc, и в этом всегда можно удостовериться, запустив alert (typeof myFunc); а во втором случае - вообще ничего не останется... "чёрный ящик" сделал свою работу и исчез... испарился -------- 2. локальная функция ничем не отличается от любой локальной переменной локальные функции для того и создаются, чтобы не загромождать глобальную область видимости вы же, создавая локальную функцию, хотите иметь доступ к ней из глобала полный и абсолютный бред в общем, вы сначала сами отрезаете себе руки по локоть, а затем идёте в музыкальную школу, чтобы вас научили играть на фортепиано ![]() Не по теме: хотя вполне могут и научить, вот так, например - http://www.youtube.com/watch?v=rVKj91uLcYc
1
|
|
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
|||||||||||
| 10.08.2013, 18:28 [ТС] | |||||||||||
|
Спасибо большой, я думал все намного сложнее) думал это независимый массив кода имеющий доступ к любой переменной в его теле, но для этого лучше использовать массивы) просто в книжке все чересчур завертели
![]() Добавлено через 12 минут По поводу второго вопроса и вправду, зачем это?) проще использовать те же объекты, или массивы) Думал все круче, допустим для того чтобы выполнить следующее выражение 3*6+6/9 мы могли бы записать:
0
|
|||||||||||
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
||||||||||||||||
| 11.08.2013, 21:02 [ТС] | ||||||||||||||||
|
Объясните пожалуйста, почему:
А
Добавлено через 41 минуту Что такое объект вызова? Добавлено через 1 час 43 минуты В первой функции меняется значение, потому что переменную тела замыкания, мы сохраняем в переменной. А соответственно, она существует. Во втором же примере, она никуда не сохраняется. А все данные о ней просто подчищаются? То есть новые ей хранить, фактически некуда. Но если мы присвоим её переменной, то кеш появится. И туда будет сливаться вся информация, касающаяся переменной тела замыкания. Проверим:
0
|
||||||||||||||||
|
|
|||||||||||
| 12.08.2013, 00:37 | |||||||||||
|
Есть такое удобное понятие — отложное вычисление. Это когда значение функции вычисляется не тогда, когда сама функция описана.
1
|
|||||||||||
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
||||||||||||||||
| 12.08.2013, 01:48 [ТС] | ||||||||||||||||
Добавлено через 10 минут Мы определили локальную переменную один раз, передав переменной a1 и a2 её значение 0, потом запустили счетчик. А если мы пишем так add()(); то запускаем сначала функцию обертку, которая каждый раз определяет переменную n которая равна 0, а потом уже запускает счетчик.
0
|
||||||||||||||||
|
|
||||||||||||||||||||||||||
| 12.08.2013, 11:38 | ||||||||||||||||||||||||||
|
Я себе это представляю таким образом:
Есть функция, это объект, который может храниться в некоторой переменной.
Грубо говоря,
Есть применение функции к списку аргументов, которая в JS обозначается скобочками: f(), f(x), f(x,y), ... притом f — это функция (как объект), а потому в тексте это может быть не только функция, которая определена непосредстенно, но и функция, получаемая при вычислении. Грубо говоря,
Объект исполнения
При вызове функции происходит следующее:
1. сначала создаются объект arguments, который содержит информацию о выз. функции, его аргументах и т.п. 2. создаётся пустой объект scope. 3. в scope добавляются свойства this, arguments, все именованые аргументы, а также все имена функций, которые объявляются через function <name>(..){...} (есть нюанс), и все имена переменных, объявленные через var (есть нюанс). Когда Вы пишите имя переменной внутри функции, например,
Кстати, я говорил о нюансе, так вот посмотрите на порядок, в котором в коде выше add и x принимают свои значения. Функции (через function) сразу принимают свои значения, а переменные (через var) — только в порядке очереди. Подробнее см. http://javascript.ru/ecma/part10#a-10 Я не советую Вам рассуждать так, как Вы рассуждаете, потому что n внутри a1 — это другая n, по сравнению с онной внутри a2. Ваши рассуждения об эквивалентности var a1 = (function(){...}()), a2 = (function(){...}()) и var a1 = add(), a2 = add() лучше проводить осторожно, потому что при трёх уровнях вложенности функций (а у нас два уровня) эти рассуждения могут не выполняться.
1
|
||||||||||||||||||||||||||
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
|
| 12.08.2013, 16:21 [ТС] | |
|
"потому что n внутри a1 — это другая n, по сравнению с онной внутри a2."
Нет я согласен, это клон.
0
|
|
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
|
| 14.08.2013, 00:53 [ТС] | |
|
Подскажите что-нибудь по теме "обезьянья заплатка"
0
|
|
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
||||||||||||||||
| 17.08.2013, 19:24 [ТС] | ||||||||||||||||
|
кто может помочь отладить код?
нужно чтобы функция создавала массив из 100 чисел от 1 до 100 разбросанных в произвольном порядке помогите отладить код, как только натыкается на уже имеющееся число выходит из функции просьба не писать свой код, просто скажите где ошибка
при вызове вручную работает
vxfdf Добавлено через 23 минуты порядочек
и как проверять скорость функции
0
|
||||||||||||||||
|
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
|
|
| 31.08.2013, 13:49 [ТС] | |
|
Ребята, а что такое /*{+*,}] - такие конструкции, где про них почитать?
Добавлено через 14 минут И еще, ребят, объясните область применения классов, я конечно понимаю что можно создавать всякие модули, но для меня это пока слишком громоздко. Не могли бы вы объяснить мне на более практичном примере, преимущества их использования, и, возможно, сферу применения.
0
|
|
|
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
|
|
| 31.08.2013, 14:15 | |
|
Вместо callee() юзайте именнованные функциональные выражения (NFE). Метод callee() уже в deprecated.
1
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
||
| 31.08.2013, 18:36 | ||
|
читать - где угодно, где найдёте "регулярные выражения javascript"
1
|
||
| 01.09.2013, 07:17 | |||||||
0
|
|||||||
| 01.09.2013, 07:17 | |
|
Помогаю со студенческими работами здесь
14
стоит оперативка на 2гб, если я докуплю ещё одну на 2гб, будут ли у меня поддерживаться все 4?
Вывести на страницу все фотографии, которые будут добавляться в админке к данному объекту Найти вероятность того, что по крайней мере 2 шара будут одноцветными Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|