千鋒教育JavaScript全套視頻教程(10天學(xué)會(huì)Js,前端javascrip

作用域是指程序源代碼中定義變量的區(qū)域。 有什么用? 作用域規(guī)定了如何查找變量,也就是確定當(dāng)前執(zhí)行代碼對(duì)變量的訪問權(quán)限。 當(dāng)一個(gè)塊或函數(shù)嵌套在另一個(gè)塊或函數(shù)中時(shí),就發(fā)生了作用域的嵌套。 作用域嵌套的查詢規(guī)則: 首先,JS引擎從當(dāng)前的執(zhí)行作用域開始查找變量。 然后,如果找不到,引擎會(huì)在外層嵌套的作用域中繼續(xù)查找。 最后,直到找到該變量,或抵達(dá)最外層的全局作用域?yàn)橹埂?/span>
我們一般將作用域分成:
- 全局作用域
- 函數(shù)作用域
- 塊級(jí)作用域
全局作用域
任何不在函數(shù)中或是大括號(hào)中聲明的變量,都是在全局作用域下,全局作用域下聲明的變量可以在程序的任意位置訪問
函數(shù)作用域
函數(shù)作用域也叫局部作用域,如果一個(gè)變量是在函數(shù)內(nèi)部聲明的它就在一個(gè)函數(shù)作用域下面。這些變量只能在函數(shù)內(nèi)部訪問,不能在函數(shù)以外去訪問
塊級(jí)作用域
ES6引入了let
和const
關(guān)鍵字,和var
關(guān)鍵字不同,在大括號(hào)中使用let
和const
聲明的變量存在于塊級(jí)作用域中。在大括號(hào)之外不能訪問這些變量
作用域鏈
當(dāng)在Javascript
中使用一個(gè)變量的時(shí)候,首先Javascript
引擎會(huì)嘗試在當(dāng)前作用域下去尋找該變量,如果沒找到,再到它的上層作用域?qū)ふ?,以此類推直到找到該變量或是已?jīng)到了全局作用域
如果在全局作用域里仍然找不到該變量,它就會(huì)在全局范圍內(nèi)隱式聲明該變量(非嚴(yán)格模式下)或是直接報(bào)錯(cuò)
預(yù)解析
在當(dāng)前作用域中,JavaScript代碼執(zhí)行之前,瀏覽器首先會(huì)默認(rèn)的把所有帶var和function聲明的變量進(jìn)行提前的聲明或者定義。
規(guī)則: var聲明的變量和function聲明的函數(shù)在預(yù)解析的時(shí)候有區(qū)別,var聲明的變量在預(yù)解析的時(shí)候只是提前的聲明,function聲明的函數(shù)在預(yù)解析的時(shí)候會(huì)提前聲明并且會(huì)同時(shí)定義。也就是說var聲明的變量和function聲明的函數(shù)的區(qū)別是在聲明的同時(shí)有沒同時(shí)進(jìn)行定義。