Обучаюсь программированию на курсах, учусь делать сайтики, было велено разобраться что такое локальные, а что глобальные переменные, но в интернете пишут умными словами, и я не понимаю, дали кусок кода, сказали определить где локальные переменные, а где глобальные, мальчики, выручайте :
function onMouseMove(event) {
path.firstSegment.point = event.point;
for (var i 0; i < points - 1; i++) {
var segment = path.segments[i];
var nextSegment = segment.next;
var vector = segment.point - nextSegment.point;
vector.length = length;
nextSegment.point = segment.point - vector;
}
path.smooth({ type: 'continuous' });
}
JavaScript
Локальные и глобальные переменные
Если ВНУТРИ функции перед именем переменной стоит var - это переменная является локальной для всего кода этой функции.
Если перед именем переменной стоит let (судя по тому, что в твоём коде let нет, на этих "курсах" СОВРЕМЕННЫЙ JavaScript НЕ изучают) - эта переменная локальна от let до соответствующей '}'.
ВСЕ прочие переменные являются глобальными. И это одна из тех ошибок в дизайне языка, которая никогда не будет исправлена.
Для ответов на такие вопросы есть хороший учебник JavaScript: https://learn.javascript.ru/
Если перед именем переменной стоит let (судя по тому, что в твоём коде let нет, на этих "курсах" СОВРЕМЕННЫЙ JavaScript НЕ изучают) - эта переменная локальна от let до соответствующей '}'.
ВСЕ прочие переменные являются глобальными. И это одна из тех ошибок в дизайне языка, которая никогда не будет исправлена.
Для ответов на такие вопросы есть хороший учебник JavaScript: https://learn.javascript.ru/
Алексей Мазаев
А почему это "ошибка", а не особенность?)
ну смотрите - у вас функция
переменная объявленная за пределами функции глобальная
let a = "string";
function (){
переменная объявленная внутри будет локальная
let a = "string";
}
переменная объявленная за пределами функции глобальная
let a = "string";
function (){
переменная объявленная внутри будет локальная
let a = "string";
}
Вопрос с подвохом) Когда объявляется функция, на самом деле создается переменная с названием функции, которая хранит ссылку на эту функцию.
Глобальными получаются все переменные, объявленные непосредственно внутри тега script. Всё остальное, что объявляется внутри функций - не видно снаружи, они локальные.
<script>
var global = "глобальная";
function globalFunc(){ // globalFunc - глобальная.
var a = "локальная"
}
if( true ) {
var a = "глобальная";
let b = "локальная. Это разница между let и var"
}
</script>
P.s. в коде из вопроса, path и points - должно быть предполагаются глобальными, но на самом деле невозможно сказать, т. к. вся эта функция может оказаться внутри другой функции, тогда здесь вообще нет глобальных.
Глобальными получаются все переменные, объявленные непосредственно внутри тега script. Всё остальное, что объявляется внутри функций - не видно снаружи, они локальные.
<script>
var global = "глобальная";
function globalFunc(){ // globalFunc - глобальная.
var a = "локальная"
}
if( true ) {
var a = "глобальная";
let b = "локальная. Это разница между let и var"
}
</script>
P.s. в коде из вопроса, path и points - должно быть предполагаются глобальными, но на самом деле невозможно сказать, т. к. вся эта функция может оказаться внутри другой функции, тогда здесь вообще нет глобальных.
>> что такое локальные, а что глобальные переменные ...
Это концепция которую используют в компилируемых языках программирования таких как С/С++. для того чтобы указать способ размещения переменной в памяти и время ее жизни. Это важно для размещения объектов в памяти.
В JavaScript не используют такую концепцию.
Вместо этого использую концепцию глобального объекта и набор правил для разрешения имен переменных.
Когда в JS говорят про глобальные переменные подразумевают свойства глобального объекта.
Любой код в JS всегда исполняется в каком то контексте (текущем окружении) глобальный объект является частью контекста исполнения.
Так же важной частью контекста исполнения является _текущая_ область видимости.
Переменные объявленные с помощью ключевых слов "var" "let" и "function" размещаются в "текущей область видимости" (т. е. считаются локальными ...).
Когда исполнение скрипта встречает в коде переменную запускается механизм разрешения имени переменной. Сначала имя ищется в текущей области видимости, если такого имени тут нет то имя ищется в вышестоящей области видимости и так пока не дойдет до самой высшей области видимости которой всегда является глобальный объект,
если имя так и не найдено то запускается механизм объявления переменной и переменная создается.
Именно из за такой механики поиска и правила что переменная создается в текущей области видимости явно не объявленные переменные становятся свойствами глобального объекта т. е. так называемыми глобальными переменными.
Код скрипта начинает исполнятся и текущей областью видимости является глобальный объект все переменные которые тут объявляются становятся глобальными.
когда в коде встречаются { ...} то создается новая область видимости и переменные у которых есть объявление "let" "const" и "function" становятся локальными. "var" становится локальной только в коде функции.
Это концепция которую используют в компилируемых языках программирования таких как С/С++. для того чтобы указать способ размещения переменной в памяти и время ее жизни. Это важно для размещения объектов в памяти.
В JavaScript не используют такую концепцию.
Вместо этого использую концепцию глобального объекта и набор правил для разрешения имен переменных.
Когда в JS говорят про глобальные переменные подразумевают свойства глобального объекта.
Любой код в JS всегда исполняется в каком то контексте (текущем окружении) глобальный объект является частью контекста исполнения.
Так же важной частью контекста исполнения является _текущая_ область видимости.
Переменные объявленные с помощью ключевых слов "var" "let" и "function" размещаются в "текущей область видимости" (т. е. считаются локальными ...).
Когда исполнение скрипта встречает в коде переменную запускается механизм разрешения имени переменной. Сначала имя ищется в текущей области видимости, если такого имени тут нет то имя ищется в вышестоящей области видимости и так пока не дойдет до самой высшей области видимости которой всегда является глобальный объект,
если имя так и не найдено то запускается механизм объявления переменной и переменная создается.
Именно из за такой механики поиска и правила что переменная создается в текущей области видимости явно не объявленные переменные становятся свойствами глобального объекта т. е. так называемыми глобальными переменными.
Код скрипта начинает исполнятся и текущей областью видимости является глобальный объект все переменные которые тут объявляются становятся глобальными.
когда в коде встречаются { ...} то создается новая область видимости и переменные у которых есть объявление "let" "const" и "function" становятся локальными. "var" становится локальной только в коде функции.
Похожие вопросы
- Помогите с JavaScript (локальные/глобальные переменные/функции)
- Как объявить глобальную переменную внутри функции в js?
- глобальные/локальные переменные в JavaScript
- Работа с переменными JS
- Целесообразно ли хранение синтаксиса javascript в переменной?
- Можно ли именовать переменную в JS?
- Синтаксис переменная Var и Let Отличие
- JavaScript. Как проверить, была ли определена переменная?
- Не правельно складываются переменные js
- Видимость переменной JavaScript