摘要:變量范圍有助于減少阻止這種情況發(fā)生。但是,在函數(shù)之外調(diào)用將導(dǎo)致由于局部變量只能在其函數(shù)中訪問(wèn),因此可以在不同的函數(shù)中使用相同的變量名稱(chēng)詞法作用域?qū)W習(xí)詞法作用域也很重要。局部變量在函數(shù)啟動(dòng)時(shí)創(chuàng)建,并在函數(shù)結(jié)束時(shí)刪除。
Scope決定了代碼中變量,函數(shù)和對(duì)象的可見(jiàn)性。在這里了解所有細(xì)節(jié)。
Scope是JavaScript和編程的一個(gè)重要方面。Scope限制了整個(gè)代碼中變量,函數(shù)和對(duì)象的可見(jiàn)性以及可用性。
這帶來(lái)了很多好處,其中包括:
安全 - 變量只能在需要的地方訪問(wèn)。
減少變量名空間沖突 - 當(dāng)兩個(gè)或更多變量共享一個(gè)通用名稱(chēng)時(shí),會(huì)發(fā)生變量名沖突。變量范圍有助于減少阻止這種情況發(fā)生。
*
在最基本的層面上,JavaScript有兩種類(lèi)型的范圍:
Global Scope(全局作用域)
Local Scope(局部作用域)
全局作用域當(dāng)你開(kāi)始用JavaScript編寫(xiě)代碼時(shí),你就已經(jīng)在全局范圍內(nèi)。任何在全局范圍內(nèi)編寫(xiě)的東西都可以在JavaScript代碼中的任何地方訪問(wèn)
var cat = "Jerry";
function localScopeExample(){ // LOCAL SCOPE console.log(cat); // Jerry }
// GLOBAL SCOPE console.log(cat); // Jerry局部作用域
局部作用域稍微復(fù)雜一點(diǎn)。局部作用域變量只能在局部作用域(它們被定義的地方)中可見(jiàn)和可訪問(wèn)。您可以將局部作用域視為您在全局范圍內(nèi)創(chuàng)建的任何新范圍。
一個(gè)簡(jiǎn)單的例子就是在使用函數(shù)時(shí)。用JavaScript編寫(xiě)的每個(gè)函數(shù)都會(huì)創(chuàng)建一個(gè)新的局部作用域。這些局部作用域的變量只能在它們定義的函數(shù)中訪問(wèn)。
我們來(lái)看一個(gè)例子。我們將創(chuàng)建一個(gè)函數(shù)并在該函數(shù)中聲明變量cat。貓可以訪問(wèn)并且可以在該功能的任何地方使用。但是,在函數(shù)之外調(diào)用cat將導(dǎo)致Uncaught ReferenceError:
function localScopeExample(){ // LOCAL SCOPE var cat = "Jerry"; console.log(cat); // Jerry }
// GLOBAL SCOPE console.log(cat); // Uncaught ReferenceError: cat is not defined
由于局部變量只能在其函數(shù)中訪問(wèn),因此可以在_不同的函數(shù)中使用相同的變量名稱(chēng)_:
function func1(){ var cat = "Jerry"; console.log(cat); // Jerry }
function func2(){ var cat = "Tom"; console.log(cat); // Tom }詞法作用域
學(xué)習(xí)詞法作用域也很重要。詞法作用域(也稱(chēng)為靜態(tài)作用域)是內(nèi)部函數(shù)訪問(wèn)外部函數(shù)范圍的能力。
我們來(lái)看一個(gè)例子。在下面的代碼中,我們定義了兩個(gè)函數(shù) - func1在全局范圍內(nèi),func2在func1范圍內(nèi)聲明。由于詞匯范圍的限制,您可以在_范圍2_中訪問(wèn)_全局作用域_和_范圍1_中的所有內(nèi)容:
// GLOBAL SCOPE var dog = "Lewis";
function func1(){ // SCOPE 1 var cat = "Jerry";
var func2 = function(){ // SCOPE 2 console.log(cat); // Jerry console.log(dog); // Lewis } }塊級(jí)作用域
使用var時(shí),變量既可以是全局作用域,也可以局部作用于定義它的函數(shù)。塊級(jí)作用域如if,for,while,{}對(duì)var 沒(méi)有影響。
let & const,另一方面,它們被限定在它們所定義的區(qū)塊內(nèi)。我們來(lái)看一個(gè)例子:
let x = 1;
{ let x = 2; console.log(x); // 2 }
console.log(x); // 1
正如你在上面看到的那樣,簡(jiǎn)單地使用括號(hào)來(lái)創(chuàng)建一個(gè)代碼塊將在本地范圍內(nèi)在該塊內(nèi)聲明的任何變量。相同的概念適用于其他塊范圍:
let x = 1;
if (x !== 2) { let x = 2; console.log(x); // 2 }
console.log(x); // 1
但要小心。如果您不小心重新聲明具有相同塊范圍的相同變量,則會(huì)出現(xiàn)錯(cuò)誤:
{ let x = 1; let x = 2; }
Uncaught SyntaxError: Identifier "x" has already been declared關(guān)鍵要點(diǎn):
全局范圍的持續(xù)時(shí)間與系統(tǒng)一樣長(zhǎng)。
局部變量在函數(shù)啟動(dòng)時(shí)創(chuàng)建,并在函數(shù)結(jié)束時(shí)刪除。
詞法作用域允許內(nèi)部函數(shù)訪問(wèn)其外部函數(shù)的作用域
const和let是塊范圍變量。塊范圍不適用于var。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/52334.html
摘要:變量范圍有助于減少阻止這種情況發(fā)生。但是,在函數(shù)之外調(diào)用將導(dǎo)致由于局部變量只能在其函數(shù)中訪問(wèn),因此可以在不同的函數(shù)中使用相同的變量名稱(chēng)詞法作用域?qū)W習(xí)詞法作用域也很重要。局部變量在函數(shù)啟動(dòng)時(shí)創(chuàng)建,并在函數(shù)結(jié)束時(shí)刪除。 Scope決定了代碼中變量,函數(shù)和對(duì)象的可見(jiàn)性。在這里了解所有細(xì)節(jié)。 showImg(https://segmentfault.com/img/remote/1460000...
摘要:變量范圍有助于減少阻止這種情況發(fā)生。但是,在函數(shù)之外調(diào)用將導(dǎo)致由于局部變量只能在其函數(shù)中訪問(wèn),因此可以在不同的函數(shù)中使用相同的變量名稱(chēng)詞法作用域?qū)W習(xí)詞法作用域也很重要。局部變量在函數(shù)啟動(dòng)時(shí)創(chuàng)建,并在函數(shù)結(jié)束時(shí)刪除。 Scope決定了代碼中變量,函數(shù)和對(duì)象的可見(jiàn)性。在這里了解所有細(xì)節(jié)。 showImg(https://segmentfault.com/img/remote/1460000...
摘要:作用域作用域是指程序源代碼中定義變量的區(qū)域。采用詞法作用域,也就是靜態(tài)作用域。而與詞法作用域相對(duì)的是動(dòng)態(tài)作用域,函數(shù)的作用域是在函數(shù)調(diào)用的時(shí)候才決定的。前面我們已經(jīng)說(shuō)了,采用的是靜態(tài)作用域,所以這個(gè)例子的結(jié)果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語(yǔ)言采用了動(dòng)態(tài)作用域??jī)烧叩膮^(qū)別又是什么?還有一個(gè)略難的思考題,快來(lái)看看吧。 作用域 作用域是指...
摘要:閉包引起的內(nèi)存泄漏總結(jié)從理論的角度將由于作用域鏈的特性中所有函數(shù)都是閉包但是從應(yīng)用的角度來(lái)說(shuō)只有當(dāng)函數(shù)以返回值返回或者當(dāng)函數(shù)以參數(shù)形式使用或者當(dāng)函數(shù)中自由變量在函數(shù)外被引用時(shí)才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會(huì)問(wèn)的問(wèn)題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經(jīng)典書(shū)籍等書(shū)中給出的概念,這些概念雖然...
摘要:在中的應(yīng)用采用詞法作用域,也就是靜態(tài)作用域。那什么又是詞法作用域或者靜態(tài)作用域呢請(qǐng)繼續(xù)往下看靜態(tài)作用域與動(dòng)態(tài)作用域因?yàn)椴捎玫氖窃~法作用域函數(shù)的作用域在函數(shù)定義的時(shí)候就決定了。 開(kāi)篇 當(dāng)我們?cè)陂_(kāi)始學(xué)習(xí)任何一門(mén)語(yǔ)言的時(shí)候,都會(huì)接觸到變量的概念,變量的出現(xiàn)其實(shí)是為了解決一個(gè)問(wèn)題,為的是存儲(chǔ)某些值,進(jìn)而,存儲(chǔ)某些值的目的是為了在之后對(duì)這個(gè)值進(jìn)行訪問(wèn)或者修改,正是這種存儲(chǔ)和訪問(wèn)變量的能力將狀態(tài)給...
閱讀 1149·2021-09-22 15:26
閱讀 2729·2021-09-09 11:52
閱讀 2055·2021-09-02 09:52
閱讀 2316·2021-08-12 13:28
閱讀 1248·2019-08-30 15:53
閱讀 582·2019-08-29 13:47
閱讀 3471·2019-08-29 11:00
閱讀 3171·2019-08-29 10:58