日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS----JavaScript中的作用域和作用域链

發布時間:2023/12/31 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS----JavaScript中的作用域和作用域链 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作用域(Scope)

1.什么是作用域

作用域是在運行時代碼中的某些特定部分中變量,函數和對象的可訪問性。

作用域(scope):一個變量的可用范圍

作用域的類型

Javascript中有三種作用域:

  • 全局作用域;
  • 函數作用域;
  • 塊級作用域;

2. 全局作用域

任何不在函數中或是大括號中聲明的變量,都是在全局作用域下,全局作用域下聲明的變量可以在程序的任意位置訪問。
例如:

// 全局變量 var greeting = 'Hello World!'; function greet() {console.log(greeting); } // 打印 'Hello World!' greet();

3. 函數作用域

函數作用域也叫局部作用域,如果一個變量是在函數內部聲明的它就在一個函數作用域下面。這些變量只能在函數內部訪問,不能在函數以外去訪問。
例如:

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

4. 塊級作用域

ES6引入了let和const關鍵字,和var關鍵字不同,在大括號中使用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);

上面代碼中可以看出,在大括號內使用var聲明的變量lang是可以在大括號之外訪問的。使用var聲明的變量不存在塊級作用域中。

5.作用域嵌套

像Javascript中函數可以在一個函數內部聲明另一個函數一樣,作用域也可以嵌套在另一個作用域中。
例如:

var name = 'Peter'; function greet() {var greeting = 'Hello';{let lang = 'English';console.log(`${lang}: ${greeting} ${name}`);} } greet();

這里我們有三層作用域嵌套,首先第一層是一個塊級作用域(let聲明的),被嵌套在一個函數作用域(greet函數)中,最外層作用域是全局作用域。

6.詞法作用域

詞法作用域(也叫靜態作用域)從字面意義上看是說作用域在詞法化階段(通常是編譯階段)確定而非執行階段確定的。
例如:

let number = 42; function printNumber() {console.log(number); } function log() {let number = 54;printNumber(); } // Prints 42 log();

上面代碼可以看出無論printNumber()在哪里調用console.log(number)都會打印42。動態作用域不同,console.log(number)這行代碼打印什么取決于函數printNumber()在哪里調用。
如果是動態作用域,上面console.log(number)這行代碼就會打印54。
使用詞法作用域,我們可以僅僅看源代碼就可以確定一個變量的作用范圍,但如果是動態作用域,代碼執行之前我們沒法確定變量的作用范圍。
像C,C++,Java,Javascript等大多數編程語言都支持靜態作用域。Perl 既支持動態作用域也支持靜態作用域。

在js中詞法作用域規則:

  • 函數允許訪問函數外的數據
  • 整個代碼結構中只有函數可以可以限定作用域
  • 作用域規則首先使用提升規則分析
  • 如果當前作用域中有名字了,就不考慮外面的名字
var num = 123; function foo(){console.log( num ); } foo();if( false ){var num = 123; } console.log( num ) //undefiend

7. 作用域鏈

當在Javascript中使用一個變量的時候,首先Javascript引擎會嘗試在當前作用域下去尋找該變量,如果沒找到,再到它的上層作用域尋找,以此類推直到找到該變量或是已經到了全局作用域。
如果在全局作用域里仍然找不到該變量,它就會在全局范圍內隱式聲明該變量(非嚴格模式下)或是直接報錯。

例如:

// 案例 1: function f1(){function f2(){} }var num = 456; function f3(){function f4(){} }

// 案例2 function f1() {var num = 123;function f2() {console.log( num );}f2(); } var num = 456; f1();

總結

以上是生活随笔為你收集整理的JS----JavaScript中的作用域和作用域链的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日干夜干天天干 | 中国黄色一级视频 | 久久女人天堂 | 亚洲精品综合精品自拍 | 日韩欧美在线观看一区二区 | 亚洲双插 | 中文字幕在线第一页 | 午夜剧场免费在线观看 | 麻豆亚洲av成人无码久久精品 | 一本综合久久 | 国产精品-区区久久久狼 | 草逼视频免费看 | 精品动漫一区二区三区在线观看 | www日本在线观看 | 日韩欧美操 | 中国大陆高清aⅴ毛片 | 欧美乱妇日本无乱码特黄大片 | 日本激情在线 | 国产另类综合 | 香蕉网站在线 | 欧美视频一区二区在线 | 爱福利视频广场 | jizz中国女人高潮 | 麻豆91精品91久久久 | 美女日批在线观看 | 亚洲精品永久免费 | 粗喘呻吟撞击猛烈疯狂 | 免费看黄色小视频 | 国产第一页在线 | 91国产在线看 | 亚洲AV成人无码久久精品同性 | av黄色网址 | 亚洲日本一区二区 | 精彩毛片| 日本一本二本三区免费 | 老妇高潮潮喷到猛进猛出 | 黄色在线小视频 | 极品美女开粉嫩精品 | 先锋影音av资源网站 | 日韩成人黄色 | 特级西西人体444www高清大胆 | 伊人成综合网 | 男生草女生视频 | 黄视频网站在线观看 | 国产精品sm调教免费专区 | 老司机精品福利视频 | 中文字幕在线天堂 | 天天摸夜夜添狠狠添婷婷 | 国产精品v欧美精品v日韩 | 黄色av电影网址 | 成人av手机在线 | 91成人高清 | 日本一级理论片在线大全 | 久久亚洲av成人无码国产电影 | 制服av网| 四虎影视av | 国内9l自拍 | 丰满人妻一区二区三区免费视频 | 亚洲va中文字幕 | 色偷偷中文字幕 | 秋霞国产午夜精品免费视频 | www黄色片网站 | free性欧美69巨大 | 精品人妻av一区二区 | 日韩精品电影一区二区 | youjizz日韩 | 97色涩| 日本变态折磨凌虐bdsm在线 | 国产在线精品自拍 | 91免费视频网址 | 美女被c出白浆 | 女人扒开腿免费视频app | 在线观看一级片 | 欧美jizzhd欧美18 | 樱桃成人精品视频在线播放 | 在线www | 国产女主播在线观看 | 日韩精品tv | 免费在线观看黄色网址 | 色97色| 久久最新视频 | 高清在线一区二区 | 黄片毛片在线看 | 一级片欧美| 美女插插 | 精彩视频一区二区 | 国产黑丝一区二区 | 官场艳妇疯狂性关系 | 亚洲黄av| 亚洲精品一区二区三区新线路 | 亚洲一区中文字幕在线 | 国产一区二区三区免费视频 | 亚洲高清色 | 丝袜制服一区 | 日韩三级视频在线观看 | 97免费人妻无码视频 | 欧美精品国产一区二区 | 国产一久久 | 99精品国产一区二区 |