一什麼是函數?

 存在形式:匿名函數 function定義的  函數存儲過程:開闢一個堆內存,把函數當作‘字符串’存儲起來。 形參是定義的時候編寫的  實參是執行的時候傳遞的  arguments是實參的集合,也叫類數組(類數組包括 元素集合和arguments) return:1.決定函數的返回值2.打斷函數的執行  this: 函數的主體 var a =10,b=20;至關於var a=10;var b=20;  var c=d=20;至關於var c =20;d=20;d沒有變量提高


變量提高

原理:代碼執行以前,js會把代碼中帶var 和帶 function的變量提早聲明數組

var:只聲明不定義  默認值是undefined瀏覽器

function:既聲明又定義函數

js的運行機制

變量提高對於條件語句來講,無論是否成立,都會進行變量提高this

在條件語句或者循環語句中的大括號包着的function聲明,高版本瀏覽器只聲明不定義cdn

變量提高只提高=左邊的,return後邊的也不提高blog

let和const不存在變量提高,可是有暫時性死循環:就是在聲明以前不能調用內存

想用他們聲明的變量 要在下邊使用 :就是先聲明在使用作用域


做用域

let const var 三者之間的區別字符串

1.var能夠重複聲明,生命的變量存在提高,聲明的變量會在window下增長一個對應的屬性。it

而let 和const都不能夠重複聲明,不存在變量提高,不會在window下增長屬性。可是let和const能夠識別塊級做用域

2.做用域:就是一塊棧內存

堆內存:存儲引用類型

棧內存:存儲值類型(私有做用域),也提供代碼的運行環境

全局做用域:頁面一打開的時候就會造成一個全局做用域,一根頁面只有一個全局做用域

私有做用域:函數執行的時候就會造成私有做用域

塊級做用域:判斷語句、循環語句、大括號包起來的部分:let、const能夠識別:在這裏邊聲明的function只聲明不定義。

上級做用域:(只有私有做用域纔有)函數執行的那個私有做用域,通常都會存在一個上級做用域:上級做用域是誰?跟函數在哪執行麼有關係,只跟函數在哪一個做用域定義有關。

函數執行:先有形參賦值,再有變量提高。

做用域鏈:私有做用域的變量有可能不是該私有做用域的私有變量,這時該變量對應的取值,先在本身的做用域查找,若是找不到就須要去上一級的做用域查找,還找不到,就去window找,扔找不到就會報錯。(私有做用域沒有形參也沒有私有變量,這時就往上級做用域查找)

上述的做用域鏈這種機制就是

函數執行的過程:先開闢一個私有做用域(棧內存),而後形參賦值,變量提高,代碼從上到下執行。

全局變量:全局做用域聲明的變量

私有變量:私有做用域聲明的變量(形參也是私有變量)

若是一個函數有形參也有實參:實參就是全局定義的值




相關文章
相關標籤/搜索