」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JS 變數宣告簡介

JS 變數宣告簡介

發佈於2024-11-08
瀏覽:173

為正在建造 alis4ops.com 的父親撰寫本指南。

  • 我稱之為「巴巴」。
  • 他正在學習建立 Web 應用程序,以前是一名電氣工程師。
  • 將在提到他的文章周圍留下一些註釋,因此 interwebz 上閱讀本文的任何人都可以忽略這些行。希望大家不要介意!

情境

我們有以下功能:

  • handleStartTouch
  • handleMoveTouch

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:

  • if (draggedElement) {

hanldeMoveTouch 呼叫時不會引發錯誤。

在 Chrome DevTools 中的 if (draggedElement) 上放置斷點將顯示dragedElement解析為handleStartTouch中的event.target提供的相同html元素

問題

為何在handleStartTouch定義了draggedElement,卻可以在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;

它不使用任一關鍵字宣告變數名稱dragedElement

  • 常數
  • 變數

例如,我們不是這樣定義它的:

    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")
  }
}

在 Chrome 中開啟 DevTools

  • 導覽至「控制台」
  • 複製並貼上上面的程式碼
  • 按回車鍵
  • 它將返回未定義,沒關係。

Intro to JS Variable Declarations

在控制台中呼叫add(1,1)

  • 你會看到控制台回傳2
add(1,1)
=> 2

Intro to JS Variable Declarations

然後呼叫 printStatus

  • 您將看到輸出 Sum: 2

Intro to JS Variable Declarations

我們可以看到printStatus()可以存取add(x, y)中定義的變數sum

這是因為變數 sum 是在沒有以下關鍵字的情況下聲明的:

  • 總和 = x y

現在讓我們更改 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")
  }
}
  • 前往 Chrome
  • 使用 Ctrl R 重新整理頁面
    • 您也可以開啟一個新分頁並再次開啟 devtools 控制台。

我們再定義一下控制台日誌中的函數。

  • 將上面的程式碼片段複製並貼上到控制台中,然後按 Enter。

我們需要重新定義它,因為我們啟動了一個新的開發控制台。

Intro to JS Variable Declarations

現在在控制台中,呼叫 add(2, 2)

  • 你會看到控制台返回4

Intro to JS Variable Declarations

呼叫printStatus查看是否可以存取add(x, y)中定義的變數sum

printStatus()
> Uncaught ReferenceError: sum is not defined
    at printStatus (:9:3)
    at :1:1

Intro to JS Variable Declarations

錯誤提示 sum 未定義

這證實了當函數內使用變數宣告(const、let、var)定義變數時,該變數的作用域僅在函數內

當定義變數時而沒有函數內的變數聲明,該變數的作用域是全域的。

希望這對巴巴(以及其他讀到這篇文章的人有幫助。)

版本聲明 本文轉載於:https://dev.to/nerdherd/variable-declartions-14lg?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼你應該為開源付費
    為什麼你應該為開源付費
    幾乎每個開發者每天都會使用開源項目,無論是在VS Code 中編寫程式碼、使用TailwindCSS 加速開發,還是使用最受歡迎的PHP 框架Laravel 建立強大的Web 應用程式.我們不要忘記用於建立管理面板的 FilamentPHP。 這些項目不是鬼建的;而是由鬼魂建造的。它們是由人們創造...
    程式設計 發佈於2024-11-08
  • 如何找到一個資料幀中存在但另一個資料幀中不存在的行(比較 df1 和 df2)?
    如何找到一個資料幀中存在但另一個資料幀中不存在的行(比較 df1 和 df2)?
    比較資料幀:尋找中存在但另一個中不存在的行比較資料幀以識別差異對於資料品質保證和合併至關重要營運。在本例中,我們有兩個具有特定結構的資料幀(df1 和 df2),需要確定 df2 中存在但 df1 中不存在的行。 最初,嘗試使用 df1 != df2 比較資料幀,結果是錯誤。此方法僅適用於具有相同行...
    程式設計 發佈於2024-11-08
  • CSS 中的動畫
    CSS 中的動畫
    CSS中的動畫有兩個部分 - @keyframes和animation-*。 @keyframes at 規則 第一部分要求我們定義@keyframes。 這讓我們可以指定在動畫持續時間的不同點應套用的 CSS 樣式。 不同的時間點以百分比值指定。可以指定 0 到 100% 之...
    程式設計 發佈於2024-11-08
  • 使用 React 建立汽車租賃平台
    使用 React 建立汽車租賃平台
    BookCars 是一個面向供應商的汽車租賃平台,具有用於管理車隊和預訂的後端,以及用於租車的前端和行動應用程式。 透過以下解決方案,您可以透過將其託管在具有至少1GB RAM 的Docker Droplet 上,以非常低的成本建立一個針對多個供應商進行優化的完全可自訂的汽車租賃網站,並使用可操作...
    程式設計 發佈於2024-11-08
  • 模擬資料產生器:高效率軟體測試的關鍵
    模擬資料產生器:高效率軟體測試的關鍵
    模拟数据生成在软件测试和开发中发挥着至关重要的作用,使团队能够在不依赖实时数据的情况下模拟真实场景。无论您是测试新功能还是开发 API,模拟数据都有助于简化流程,确保测试一致、可靠,而无需访问生产数据库。 在本文中,我们将深入探讨模拟数据生成器是什么、为什么它们很重要、如何实现它们以及当今开发人员...
    程式設計 發佈於2024-11-08
  • 模擬請求
    模擬請求
    冷靜一點,提交者王,我不會談論 JSON-Server,但它值得留下來! 每個前端都會經歷模擬端點請求的需要,有時是因為後端還沒有完成其工作,有時是為了調試和模擬特定情況,這在日常生活中很常見。 是的,JSON-Server 令人難以置信並且使用起來非常簡單,但是幾天前我遇到了一個非常具體的問題...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中迭代遍歷和處理子目錄內的檔案?
    如何在 PHP 中迭代遍歷和處理子目錄內的檔案?
    如何在PHP中遍歷子目錄並迭代處理文件在PHP中,遍歷子目錄並迭代處理文件可以使用RecursiveDirectoryIterator和RecursiveIteratorIterator來實作。讓我們了解如何根據需要建立程式碼:// Initializing the path to the main...
    程式設計 發佈於2024-11-08
  • 癮君子 # 何時使用效果、Angular DI 功能、請求快取等
    癮君子 # 何時使用效果、Angular DI 功能、請求快取等
    ?嘿,Angular Addict 夥伴 這是 Angular Addicts Newsletter 的第 30 期,這是一本每月精選的引起我注意的 Angular 資源合集。 (這裡是第29期、28期、27期) ?發佈公告 ?Nx 19.8 更新 ...
    程式設計 發佈於2024-11-08
  • 如何吸引頂尖 Python 開發人員到你的公司
    如何吸引頂尖 Python 開發人員到你的公司
    在竞争激烈的技术领域,吸引顶级 Python 开发人员对于任何希望利用这种多功能编程语言的力量的组织来说至关重要。随着 Python 继续在 Web 开发、数据科学和机器学习等领域占据主导地位,对熟练 Python 开发人员的需求空前高涨。如果您想聘请能够推动创新并为您的项目做出有意义贡献的 Pyt...
    程式設計 發佈於2024-11-08
  • **JavaScript 中 `location = URL` 和 `location.href = URL` 有什麼不同?
    **JavaScript 中 `location = URL` 和 `location.href = URL` 有什麼不同?
    JavaScript:「location = URL」和「location.href = URL」的差異在JavaScript 中,操作網頁的URL 可以透過以下方式實現兩種類似的方法:直接設定location 屬性或設定location.href 屬性。雖然功能可能看起來相同,但這兩種方法之間存在...
    程式設計 發佈於2024-11-08
  • 如何有效地將PHP變數插入字串?
    如何有效地將PHP變數插入字串?
    將PHP 變數插入字串將PHP 變數合併到字串中時,注意語法以確保所需的輸出為至關重要的獲得。為了解決這個問題,讓我們檢查一下提示中顯示的程式碼:目標是包含$ width 變數在寬度樣式屬性中,並確保其後跟“px”。不幸的是,嘗試用空格分隔變數和“px”或將它們連接在一起會導致錯誤。 解決方案1:串...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 中底線 (`_`) 的使用
    了解 JavaScript 中底線 (`_`) 的使用
    在 JavaScript 中編碼時,您可能會遇到用作變數名稱的下劃線字元 (_),特別是在函數參數中。雖然乍看之下似乎很不尋常,但由於各種原因,這種做法在開發人員中很常見。在這篇文章中,我們將探討底線代表什麼,為什麼要使用它,以及它在現實範例中的顯示方式,例如 coalesceES6 函數。 ...
    程式設計 發佈於2024-11-08
  • 像程式設計師一樣思考:學習 C 基礎知識
    像程式設計師一樣思考:學習 C 基礎知識
    以程式設計師思考學習 C 語言:基本語法:變數、資料型態、常數、運算子、控制流。實戰案例:計算兩個數的平均值,輸入兩個整數並計算其平均值。 以程式設計師思考:用C 語言學習基礎引言學習程式設計並不難,尤其是當你以程式設計師思維思考時。本文將從基礎開始,用 C 語言引導你逐步了解程式設計入門知識。 C...
    程式設計 發佈於2024-11-08
  • Python 中的列表理解語法何時需要三元運算子?
    Python 中的列表理解語法何時需要三元運算子?
    列表理解難題:可迭代物件中的條件篩選在Python 中,列表理解提供了一種基於現有可迭代物件建立清單的簡潔方法。然而,出現了一個關於涉及 if 語句的列表理解的問題。 目標是比較兩個可迭代物件 a 和 b,並僅列印兩者中出現的元素。預期的程式碼如下所示:print([y if y not in b ...
    程式設計 發佈於2024-11-08
  • 使用 MetaTrader 訂單管理和市場資料收集進行自動交易
    使用 MetaTrader 訂單管理和市場資料收集進行自動交易
    Your AsimovMT class provides a comprehensive interface for interacting with MetaTrader5 (MT5) using Python. However, there are several areas in your c...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3