国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

作用域鏈的理解

這篇具有很好參考價值的文章主要介紹了作用域鏈的理解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


作用域

??????作用域,即變量(變量作用域又稱上下文)和函數(shù)生效(能被訪問)的區(qū)域或集合

作用域決定了代碼塊中變量和其他資源的可見性

function demo(){
	let variable = "變量";
}
demo();//要先執(zhí)行這個函數(shù),否則根本不知道里面是啥
console.log(variable)//訪問不到 不可見

我們一般將作用域分成:

  • 我們一般將作用域分成:
  • 全局作用域
  • 函數(shù)作用域
  • 塊級作用域

全局作用域

??????任何不在函數(shù)中或是大括號中聲明的變量,都是在全局作用域下,全局作用域下聲明的變量可以在程序的任意位置訪問

//全局變量
var greeting = '全局變量'
function greet(){
	console.log(greeting)
}
greet()

函數(shù)作用域

??????函數(shù)作用域也叫局部作用域,如果一個變量是在函數(shù)內(nèi)部聲明的它就在一個函數(shù)作用域下面。這些變量只能在函數(shù)內(nèi)部訪問,不能在函數(shù)以外去訪問

function greet() {
  var greeting = 'Hello World!';
  console.log(greeting);
}
// 打印 'Hello World!'
greet();
// 報錯: Uncaught ReferenceError: greeting is not defined
console.log(greeting);

可見上述代碼中在函數(shù)內(nèi)部聲明的變量或函數(shù),在函數(shù)外部是無法訪問的,這說明在函數(shù)內(nèi)部定義的變量或者方法只是函數(shù)作用域

塊級作用域

ES6引入了let和const關(guān)鍵字,和var關(guān)鍵字不同,在大括號中使用let和const聲明的變量存在于塊級作用域中。在大括號之外不能訪問這些變量

{
  // 塊級作用域中的變量
  let greeting = 'Hello World!';
  var lang = 'English';
  console.log(greeting); // Prints 'Hello World!'
}
// 變量 'English'
console.log(lang);
// 報錯:Uncaught ReferenceError: greeting is not defined
console.log(greeting);

二、詞法作用域

??詞法作用域,又叫靜態(tài)作用域,變量被創(chuàng)建時就確定好了,而非執(zhí)行階段確定的。也就是說我們寫好代碼時它的作用域就確定了,JavaScript 遵循的就是詞法作用域

var a = 2;
function foo(){
	console.log(a)
}
function bar(){
	var a = 1;
	foo();
}
bar()

由于JavaScript遵循詞法作用域,相同層級的 foo 和 bar 就沒有辦法訪問到彼此塊作用域中的變量,所以輸出2

三、作用域鏈

??????當在Javascript中使用一個變量的時候,首先Javascript引擎會嘗試在當前作用域下去尋找該變量,如果沒找到,再到它的上層作用域?qū)ふ?,以此類推直到找到該變量或是已?jīng)到了全局作用域

如果在全局作用域里仍然找不到該變量,它就會在全局范圍內(nèi)隱式聲明該變量(非嚴格模式下)或是直接報錯

把作用域比喻成一個建筑,這份建筑代表程序中的嵌套作用域鏈,第一層代表當前的執(zhí)行作用域,頂層代表全局作用域

作用域鏈的理解
變量的引用會順著當前樓層進行查找,如果找不到,則會往上一層找,一旦到達頂層,查找的過程都會停止

var sex = '男';
function person(){
	var name = '李四';
	function student(){
		var age = 18;
		console.log(name);
		console.log(sex);
	}
	student();
	console.log(age);
}
person();

分析:文章來源地址http://www.zghlxwxcb.cn/news/detail-477376.html

  • student 函數(shù)內(nèi)部屬于最內(nèi)層作用域,找不到 name,向上一層作用域 person函數(shù)內(nèi)部找,找到了輸出“”
  • student內(nèi)部輸出 sex時找不到,向上一層作用域 person函數(shù)找,還找不到繼續(xù)向上一層找,即全局作用域,找到輸出
  • 在 person 函數(shù)內(nèi)部輸出 age 時找不到,向上一層作用域找,即全局作用域,還是找不到則 報錯

到了這里,關(guān)于作用域鏈的理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue新學習 02 vue命令v-model,數(shù)據(jù)代理(作用域和作用域鏈),事件,監(jiān)聽,條件渲染,計算屬性(也就是把操作屬性的語句放到vue實例中)

    vue新學習 02 vue命令v-model,數(shù)據(jù)代理(作用域和作用域鏈),事件,監(jiān)聽,條件渲染,計算屬性(也就是把操作屬性的語句放到vue實例中)

    雙向綁定用命令v-model: v-bind的命令是單項去綁定data中的相關(guān)屬性,此時的data是真正的data,并沒有用變量聲明的方式去接收vue實例對象,也就是例如用const vm = new Vue({})。而是直接就采用了new Vue({})這樣子的形式,(v-bind和v-model在這個例子中都是如此,所以現(xiàn)在并沒有數(shù)據(jù)

    2024年02月15日
    瀏覽(30)
  • 對原型、原型鏈的理解

    對原型、原型鏈的理解

    在 JavaScript 中是使用構(gòu)造兩數(shù)來新建一個對象的,每一個構(gòu)造函數(shù)的內(nèi)部都有一個 prototype 屬性,它的屬性值是一個對象,這個對象包含了可以由該構(gòu)造西數(shù)的所有實例共享的屬性和方法。 當使用構(gòu)造函數(shù)新建一個對象后,在這個對象的內(nèi)部將包含一個指針,這個指針指向構(gòu)

    2024年02月15日
    瀏覽(22)
  • 深入理解區(qū)塊鏈的工作原理

    作者:禪與計算機程序設(shè)計藝術(shù) 區(qū)塊鏈是一個由分布式數(shù)據(jù)庫組成的共享系統(tǒng),它的獨特之處在于它能夠記錄下所有歷史上的數(shù)據(jù),并通過一個公共的、不可篡改的 ledger(賬本) 來記錄所有交易記錄和數(shù)據(jù)變更。通過這種方式,所有的用戶都可以驗證、驗證交易記錄和數(shù)據(jù),

    2024年02月08日
    瀏覽(28)
  • 【精彩點評】正確理解區(qū)塊鏈能源消耗的內(nèi)涵以及對綠色區(qū)塊鏈的探索

    【精彩點評】正確理解區(qū)塊鏈能源消耗的內(nèi)涵以及對綠色區(qū)塊鏈的探索

    發(fā)表時間:2022年4月13日 信息來源:bsvblockchain.org 為了理解區(qū)塊鏈技術(shù)的工作原理并確定如何更好地對其加以利用,就區(qū)塊鏈技術(shù)提出疑問是不可避免的。也許你正在被區(qū)塊鏈的能源效率這個問題所困擾。 經(jīng)常有人說,一些區(qū)塊鏈網(wǎng)絡(luò)消耗的電力高達64TWh(太瓦時),這個數(shù)

    2024年01月18日
    瀏覽(21)
  • react鉤子副作用理解

    useEffect(() = { fetch(‘https://api.example.com/data’) .then(response = response.json()) .then(data = setData(data)); }, []); 怎么理解這個[] 在 React 中,useEffect 鉤子用于處理副作用,比如數(shù)據(jù)獲取、訂閱、手動 DOM 操作等。useEffect 接受兩個參數(shù):一個是副作用函數(shù),另一個是依賴數(shù)組。 在你提供的代

    2024年02月13日
    瀏覽(40)
  • 【無標題】作用域的理解

    作用域,即變量(變量作用域又稱上下文)和函數(shù)生效(能被訪問)的區(qū)域或集合,作用域決定了代碼區(qū)塊中變量和其他資源的可見性。 函數(shù)myFunction內(nèi)部創(chuàng)建一個inVariable變量,在全局訪問這個變量的時候,系統(tǒng)會報錯,這就說明在全局是無法獲取到(閉包除外)函數(shù)內(nèi)部的

    2023年04月10日
    瀏覽(21)
  • proto中service 作用的理解

    轉(zhuǎn)載請注明出處: 在 proto 文件中,service 用于定義一組 RPC 方法,在服務(wù)端實現(xiàn)這些方法,并在客戶端調(diào)用這些方法進行遠程過程調(diào)用。 service 的定義方式如下: 其中,MyService 是服務(wù)的名稱,MyMethod 是方法的名稱,MyRequest 和 MyResponse 分別是輸入和輸出消息的類型。 在 Java

    2024年02月05日
    瀏覽(23)
  • js中作用域的理解?

    js中作用域的理解?

    作用域,即變量(變量作用域又稱上下文)和函數(shù)生效(能被訪問)的區(qū)域或集合 換句話說,作用域決定了代碼區(qū)塊中變量和其他資源的可見性 舉個例子 上述例子中,函數(shù)myFunction內(nèi)部創(chuàng)建一個inVariable變量,當我們在全局訪問這個變量的時候,系統(tǒng)會報錯 這就說明我們在全局是無

    2024年02月11日
    瀏覽(22)
  • Go語言代碼塊與作用域理解

    Go語言代碼塊與作用域理解

    如果不深入理解 Go 語言的代碼塊作用域,程序?qū)a(chǎn)生我們無法理解的行為,比如說在循環(huán)中創(chuàng)建 goroutine func, 為什么需要傳遞參數(shù)至 goroutine 內(nèi)部,否則所有的 func 使用的變量參數(shù)都是循環(huán)的最后一個值。 看下邊這個 demo, 就需要深入理解 Go 語言代碼塊的作用域才能理直氣壯

    2024年02月11日
    瀏覽(22)
  • 【MySql】MySql索引的作用&&索引的理解

    【MySql】MySql索引的作用&&索引的理解

    【MySql】MySql索引的作用索引的理解 索引是與效率掛鉤的,所以沒有索引,可能會存在問題 索引:提高數(shù)據(jù)庫的性能,索引是物美價廉的東西了。不用加內(nèi)存,不用改程序,不用調(diào)sql,只要執(zhí)行正確的 create index ,查詢速度就可能提高成百上千倍。但是天下沒有免費的午餐,

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包