Это руководство пишет отец, создающий alis4ops.com.
У нас есть следующие функции:
Баба определена в DragDrop.js
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; } function handleMoveTouch(event) { event.preventDefault() if (draggedElement) { const touch = event.touches[0]; // ..more code } }
Обратите внимание, что мы получаем доступ к перетаскиваемому элементу в режиме онлайн:
hanldeMoveTouch не выдает ошибку при вызове.
Размещение точки останова на if (draggedElement) в Chrome DevTools покажет, что draggedElement разрешается в тот же элемент html, который предоставлен event.target в handleStartTouch
Почему мы можем получить доступ к перетаскиваемому элементу в handleMoveTouch, даже если он определен в handleStartTouch
В более общем смысле, почему мы можем получить доступ к переменной, которая была определена в функции, в другой функции в javascript?
Посмотрите на функцию handleStartTouch:
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; }
В частности, строка:
draggedElement = event.target;
Он не объявляет имя переменной draggedElement, используя ни одно из ключевых слов.
Например, мы не определяем это так:
const draggedElement = event.target;
В Javascript, когда мы не используем объявления переменных (также называемые ключевыми словами), Javascript считает эту переменную глобальной переменной.
Рассмотрим следующий пример, в котором мы определяем две функции:
// Takes in two arguments and returns the sum function add(x, y) { sum = x y return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
Откройте DevTools в Chrome
В консоли вызовите add(1,1)
add(1,1) => 2
Затем вызовите printStatus
Мы видим, что printStatus() может получить доступ к переменной sum, определенной в add(x, y)
Это связано с тем, что переменная sum объявляется без следующих ключевых слов:
Теперь давайте изменим add(x, y) add, чтобы использовать объявление переменной для sum
// Takes in two arguments and returns the sum function add(x, y) { const sum = x y // use the variable declartion const return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
Давайте еще раз определим функции в журнале консоли.
Нам нужно переопределить его, потому что мы запускаем новую консоль разработчика.
Теперь в консоли вызовите add(2, 2)
Вызовите printStatus, чтобы узнать, есть ли доступ к переменной sum, определенной в add(x, y)
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (:9:3) at :1:1
Ошибка: сумма не определена
Это подтверждает, что когда переменная определена с объявлением переменной (const, let, var) внутри функции, область действия этой переменной находится только внутри функции
Когда переменная определена без объявления переменной внутри функции, область действия этой переменной является глобальной.
Надеюсь, это поможет Бабе (и всем, кто это читает.)
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3