摘要:作用域作用讀寫域空間范圍區(qū)域解析器全局變量全局函數(shù)。自上而下函數(shù)域局部變量局部函數(shù)。中使用,自己未定義,在中定義的變量,會報錯中使用,中定義的變量,可以使用。由里而外沒有塊級作用域的概念,會解析里邊的。并添加到當(dāng)前環(huán)境中。
作用域
作用:讀、寫
域:空間、范圍、區(qū)域
----JS解析器-----
script 全局變量、全局函數(shù)。【自上而下】
函數(shù)域 局部變量、局部函數(shù)。【自里而外】
1)JS的預(yù)解析
找一些東西 【var function 參數(shù)】
1、var a = 1;
找到 var a,設(shè)置成 a = undefined。不讀取后邊的 = 1。
【所有的變量,在正式運(yùn)行代碼之前,都賦值一個值,undefined】
2、fn1 = function fn1() { alert(2); }
【所有的函數(shù),在正式運(yùn)行代碼之前,都是整個函數(shù)塊,不運(yùn)行里邊的內(nèi)容】
**預(yù)解析機(jī)制
遇到重名的:只留一個,留下不留上。變量和函數(shù)重名,不論上下,留函數(shù)。
2)逐行解讀代碼
1、alert(a); //undefined
因?yàn)镴S的預(yù)解析中,var a = undefined。
【開始解讀代碼,從JS的預(yù)解析中去找】
2、var a = 1; //通過表達(dá)式將a變成1
表達(dá)式: = - + * / % ++ -- ! 參數(shù)
【能改變值得都是表達(dá)式,表達(dá)式能修改預(yù)解析的值】
3、function fn1(){} //函數(shù),沒被調(diào)用,不會執(zhí)行內(nèi)部代碼
//script 自上而下,執(zhí)行完script1,再執(zhí)行script2。
//script1中使用,自己未定義,在script2中定義的變量,會報錯
//script2中使用,script1中定義的變量,可以使用。
1、script預(yù)解析【var function 參數(shù)】
var a = undefined
function fn1(){}
2、逐行解讀代碼
var a = 1; //表達(dá)式
function fn1(){} //不執(zhí)行
fn1() //函數(shù)調(diào)用
2.1 預(yù)解析 【var function 參數(shù)】
2.2逐行解讀代碼
3、繼續(xù)逐行解讀全局代碼
function(){} //運(yùn)行由里到外
作用域鏈
子級作用域(函數(shù))沒有找到 【var function 參數(shù)】,回到父級作用域找到【var function 參數(shù)】
逐行解析代碼,執(zhí)行表達(dá)式會更改 父級【var function 參數(shù)】內(nèi)容
子級作用域(函數(shù))找到【參數(shù)】,進(jìn)行預(yù)解析 = var 參數(shù)(局部變量)
1、有傳參的情況下,會默認(rèn)在子級函數(shù)作用域,解析 var a = undefined
2、逐行解讀代碼
var = 參數(shù) //執(zhí)行表達(dá)式,不傳參就是undefined
alert(a) //1 先在當(dāng)前作用域找a,如果有就直接使用,如果沒有就去父級作用域找。【由里而外】
JS沒有塊級作用域的概念,會解析if(){} for(){}里邊的var。并添加到當(dāng)前環(huán)境中。不會被銷毀
FF不能對if(){}, for(){} 里邊f(xié)unction進(jìn)行預(yù)解析,兼容性
在子級作用域中,使用匿名變量,會加載到全局作用域中。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99830.html
摘要:也正因?yàn)檫@個閉包的特性,閉包函數(shù)可以讓父函數(shù)的數(shù)據(jù)一直駐留在內(nèi)存中保存,從而這也是后來模塊化的基礎(chǔ)。只有閉包函數(shù),可以讓它的父函數(shù)作用域永恒,像全局作用域,一直在內(nèi)存中存在。的本質(zhì)就是如此,每個模塊文件就是一個大閉包。 為什么會有閉包 js之所以會有閉包,是因?yàn)閖s不同于其他規(guī)范的語言,js允許一個函數(shù)中再嵌套子函數(shù),正是因?yàn)檫@種允許函數(shù)嵌套,導(dǎo)致js出現(xiàn)了所謂閉包。 function...
摘要:所以的作用域是靜態(tài)作用域,也叫詞法作用域。總結(jié)是一門基于詞法作用域靜態(tài)作用域的語言,會沿著作用域鏈像氣泡一樣向外部尋找變量聲明。又是函數(shù)作用域的語言,在中,使用和關(guān)鍵字后,能讓變量處于塊作用域中,而且不存在聲明提升。 本文共 1700 字,讀完只需 7 分鐘 概述 變量,編程語言中我們用來模擬現(xiàn)實(shí)概念的工具,比方說,變量可以表示對象,數(shù)組,數(shù)字,字符。既然是工具,那么就用工具的適用范圍...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標(biāo)簽,點(diǎn)擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實(shí)質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標(biāo)簽,點(diǎn)擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實(shí)質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級作用域。 作用域與閉包 如何用js創(chuàng)建10個button標(biāo)簽,點(diǎn)擊每個按鈕時打印按鈕對應(yīng)的序號? 看到上述問題,如果你能看出來這個問題實(shí)質(zhì)上是考對作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...
閱讀 3674·2021-11-23 09:51
閱讀 1035·2021-11-19 11:30
閱讀 3360·2019-08-29 14:16
閱讀 3370·2019-08-29 12:12
閱讀 2363·2019-08-26 13:40
閱讀 3471·2019-08-26 12:21
閱讀 3073·2019-08-26 11:55
閱讀 2221·2019-08-26 11:35