このガイドは、alis4ops.com を構築している父親によって書かれています。
次の機能があります:
DragDrop.js で定義された Baba
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 } }
次の行で draggedElement にアクセスしていることに注意してください:
hanldeMoveTouch を呼び出したときにエラーが発生しません。
Chrome DevTools で if (draggElement) にブレークポイントを設定すると、draggedElement が handleStartTouch のevent.target によって提供される同じ HTML 要素に解決されることが表示されます
handleStartTouch で定義されているにもかかわらず、handleMoveTouch の draggedElement にアクセスできるのはなぜですか
より一般的に、関数内で定義された変数に 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 はその変数を グローバル変数.
とみなします。2 つの関数を定義する次の例を考えてみましょう:
// 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") } }
Chrome で DevTools を開きます
コンソールで、add(1,1)
を呼び出します。add(1,1) => 2
次に printStatus を呼び出します
printStatus() が add(x, y) で定義された変数 sum にアクセスできることがわかります
これは、変数 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 を呼び出して、add(x, y) で定義された変数 sum にアクセスできるかどうかを確認します
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (:9:3) at :1:1
合計が定義されていないというエラーが表示されます
これは、関数内で変数宣言 (const、let、var) を使用して変数が定義されている場合、その変数のスコープは関数内のみであることを確認します
関数内で変数宣言をせずに変数が定義されている場合、その変数のスコープはグローバルになります。
これがババ (そしてこれを読んでいる他の人) のお役に立てば幸いです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3