搜尋
首頁web前端前端問答javascript的2種變數範圍有什麼不同

javascript的2種變數範圍有什麼不同

Jul 19, 2021 am 11:24 AM
javascript變數作用域

區別:在全域作用域中,變數在整個頁面腳本中都是可見的,可以自由存取。在局部作用域中,變數僅能在宣告的函數內部可見,函數外是不允許存取的;函數執行完畢之後,局部作用域銷毀。

javascript的2種變數範圍有什麼不同

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

變數範圍,可稱為“變數作用域(Scope)”,是指變數在程式中可以存取的有效範圍,也稱為變數的可見性。

作用域

1、什麼是作用域(Scope)

 通常來說,一段程式碼中所用到的名字並不總是有效和可用的,而限定這個名字的可用性的代碼範圍就是這個名字的作用域。

JS作用域:就是程式碼名字(變數)作用的範圍

作用域的目的:是為了提高程式的可靠性,更重要的是減少命名衝突

#2、JS的作用域的分類(ES6之前)

JS作用域可以分為兩大類:全域作用域、局部作用域(函數作用域)

1)全域作用域:

  直接寫在script 標籤之中的JS程式碼,都是全域作用域;

#或是一個單獨的JS 檔案中的。

  全域作用域在頁面開啟時創建,頁面關閉時銷毀;

  在全域作用域中有一個全域物件window(代表的是一個瀏覽器的窗口,由瀏覽器創建),可以直接使用。

在全域作用域中,

  • 所有建立的變數都會作為 window 物件的屬性保存。

  • 所有建立的函數都會儲存為 window 物件的方法。

2)局部作用域(函數作用域):

  在函數內部就是局部作用域,這個程式碼的名字只在函數的內部起作用

  呼叫函數時創建函數作用域,函數執行完畢之後,函數作用域銷毀;

  每調用一次函數就會創建一個新的函數作用域,它們之間是相互獨立的。

實例分析:

在這個例子裡面 un函數裡面的 局部作用域中 有一個 num 變量,script 標籤的全域作用域中也有一個 num變數。

(一個在全域作用域下,另一個在局部作用域下,雖然兩個變數的變數名稱相衝突,但是並沒有影響。)

所以,在不同的作用域下,變數名稱相同也不受影響,這樣就很有效的減少了命名衝突。

<script>
    var num = 10;
    function nu(){
        var num = 20;
        console.log(num);
    }
    nu();
    console.log(num);
</script>

 JS現階段(ES6之前)沒有區塊級作用域,被區塊級作用域就是用大括號({})包含的就是區塊級作用域。

二、變數的作用域

JavaScript 變數可以分為全域變數與局部變數:

  • 全域變數:變數在整個頁面腳本中都是可見的,可以被自由存取;其作用域為全域作用域。

  • 局部變數:變數只能在宣告的函數內部可見,函數外是不允許存取的;其作用域為局部作用域。

範例1

下面範例示範了全域變數和局部變數的關係。

var a = 1;  //声明并初始化全局变量
function f(){  //声明函数
    document.write(a);  //显示undefined
    var a = 2;  //声明并初始化局部变量
    document.write(a);  //显示 2
}
f(); //调用函数

由於函數內部宣告了一個同名局部變數 a,所以在預編譯期,JavaScript 使用該變數覆寫全域變數在函數內部的影響。而在執行初期,局部變數 a 未賦值,所以在函數內第 1 行程式碼讀取局部變數 a 的值也就是 undefined 了。當執行到函數第 2 行程式碼時,為局部變數賦值 2,所以在第 3 行就顯示為 2。

範例2

下面範例示範如果不明確宣告局部變數所帶來的後果。

var jQuery = 1;
(function () {
    jQuery = window.jQuery = window.$ = function(){};
})()
document.write(jQuery);  //显示函数代码:function(){}

因此,在函數體內使用全域變數是一種危險的行為。為了避免此類問題,應該養成在函數體內使用 var 語句明確聲明局部變數的習慣。

【推薦學習:javascript高階教學

#

以上是javascript的2種變數範圍有什麼不同的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
React強大的社區和生態系統的好處React強大的社區和生態系統的好處Apr 29, 2025 am 12:46 AM

React'sstrongCommunityAndecoSystemoffernumerBeneFits:1)age awealthoflibrariesandgithub; 2)AwealthoflibrariesandTools,sustasuicomponentLibontlibemontLibrariesLikeChakaAkraUii; 3)

反應移動開發的本地:構建跨平台應用程序反應移動開發的本地:構建跨平台應用程序Apr 29, 2025 am 12:43 AM

ReactNativeischosenformobiledevelopmentbecauseitallowsdeveloperstowritecodeonceanddeployitonmultipleplatforms,reducingdevelopmenttimeandcosts.Itoffersnear-nativeperformance,athrivingcommunity,andleveragesexistingwebdevelopmentskills.KeytomasteringRea

用react中的usestate()正確更新狀態用react中的usestate()正確更新狀態Apr 29, 2025 am 12:42 AM

在React中正確更新useState()狀態需要理解狀態管理的細節。 1)使用函數式更新來處理異步更新。 2)創建新狀態對像或數組來避免直接修改狀態。 3)使用單一狀態對像管理複雜表單。 4)使用防抖技術優化性能。這些方法能幫助開發者避免常見問題,編寫更robust的React應用。

React的基於組件的體系結構:可擴展UI開發的關鍵React的基於組件的體系結構:可擴展UI開發的關鍵Apr 29, 2025 am 12:33 AM

React的組件化架構通過模塊化、可重用性和可維護性使得可擴展UI開髮變得高效。 1)模塊化允許UI被分解成可獨立開發和測試的組件;2)組件的可重用性在不同項目中節省時間並保持一致性;3)可維護性使問題定位和更新更容易,但需避免組件過度複雜和深度嵌套。

用反應的聲明性編程:簡化UI邏輯用反應的聲明性編程:簡化UI邏輯Apr 29, 2025 am 12:06 AM

在React中,聲明式編程通過描述UI的期望狀態來簡化UI邏輯。 1)通過定義UI狀態,React會自動處理DOM更新。 2)這種方法使代碼更清晰、易維護。 3)但需要注意狀態管理複雜性和優化重渲染。

React的生態系統的大小:瀏覽複雜的景觀React的生態系統的大小:瀏覽複雜的景觀Apr 28, 2025 am 12:21 AM

TonavigateReact'scomplexecosystemeffectively,understandthetoolsandlibraries,recognizetheirstrengthsandweaknesses,andintegratethemtoenhancedevelopment.StartwithcoreReactconceptsanduseState,thengraduallyintroducemorecomplexsolutionslikeReduxorMobXasnee

React如何使用密鑰有效地識別列表項目React如何使用密鑰有效地識別列表項目Apr 28, 2025 am 12:20 AM

RectuseSkeyStoeficelyListifyListIdifyListItemsbyProvidistableIdentityToeachelement.1)keysallowReaeActTotRackChangEsInListSwithouterSwithoutreThoutreTheenteringTheEntirelist.2)selectuniqueandstablekeys,避免使用

在React中調試與密鑰相關的問題:識別和解決問題在React中調試與密鑰相關的問題:識別和解決問題Apr 28, 2025 am 12:17 AM

KeysinrectarecrucialforOptimizingTherEnderingProcessandManagingDynamicListSefectefection.tospotaTandFixKey與依賴的人:1)adduniqueKeykeystoliquekeystolistItemStoAvoidWarningSwarningSwarningSwarningSperformance和2)useuniqueIdentifiersIdentifiersIdentifiersIdentifiersFromdatainSteAtofIndicessuessuessessemessuessessemessemessemesseysemessekeys,3)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具