一什麼是函式?

王東煜發表於2019-09-12

 存在形式:匿名函式 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的執行機制

變數提升對於條件語句來說,不管是否成立,都會進行變數提升

在條件語句或者迴圈語句中的大括號包著的function宣告,高版本瀏覽器只宣告不定義

變數提升只提升=左邊的,return後邊的也不提升

let和const不存在變數提升,但是有暫時性死迴圈:就是在宣告之前不能呼叫

想用他們宣告的變數 要在下邊使用 :就是先宣告在使用


作用域

let const var 三者之間的區別

1.var可以重複宣告,生命的變數存在提升,宣告的變數會在window下增加一個對應的屬性。

而let 和const都不可以重複宣告,不存在變數提升,不會在window下增加屬性。但是let和const可以識別塊級作用域

2.作用域:就是一塊棧記憶體

堆記憶體:儲存引用型別

棧記憶體:儲存值型別(私有作用域),也提供程式碼的執行環境

全域性作用域:頁面一開啟的時候就會形成一個全域性作用域,一根頁面只有一個全域性作用域

私有作用域:函式執行的時候就會形成私有作用域

塊級作用域:判斷語句、迴圈語句、大括號包起來的部分:let、const可以識別:在這裡邊宣告的function只宣告不定義。

上級作用域:(只有私有作用域才有)函式執行的那個私有作用域,一般都會存在一個上級作用域:上級作用域是誰?跟函式在哪執行麼有關係,只跟函式在哪個作用域定義有關。

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

作用域鏈:私有作用域的變數有可能不是該私有作用域的私有變數,這時該變數對應的取值,先在自己的作用域查詢,如果找不到就需要去上一級的作用域查詢,還找不到,就去window找,扔找不到就會報錯。(私有作用域沒有形參也沒有私有變數,這時就往上級作用域查詢)

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

函式執行的過程:先開闢一個私有作用域(棧記憶體),然後形參賦值,變數提升,程式碼從上到下執行。

全域性變數:全域性作用域宣告的變數

私有變數:私有作用域宣告的變數(形參也是私有變數)

如果一個函式有形參也有實參:實參就是全域性定義的值




一什麼是函式?

相關文章