JavaScript-函數-操作原理

函數作爲JS中引用數據類型的一種,也是按照引用地址來操作的。

function sum(){
var total=1+1;//計算出1+1的和;
total *=20;//total的和再乘以20;
console.log(total.toFixed(2));//打印出total,且保留兩位小數。
}
sum();

一.創建函數:
1.首先會在當前作用域中聲明一個函數名(聲明的函數名和使用var聲明的變量名是一樣的操作:var sum; function sum;這兩個名字算重複了。)

2.瀏覽器首先會開闢一個新的內存空間(分配一個16進制地址),把函數體中寫好的代碼當做普通的字符串存儲在這個內存空間中。(創建一個函數,如果不執行沒有意義。)

3.把內存空間中的地址賦值給之前聲明的那該函數名。

二.函數執行:
1.目的:把之前存儲的實現具體功能的JS代碼執行;
形參賦值:
變量提升:私有作用域中的變量提升。
2.函數執行,瀏覽器首先會爲其開闢一個新的私有作用域(只能執行函數中之前編寫的JS代碼)
把之前創建時候存儲的那些JS代碼字符串拿到私有作用域中,然後把它們變爲JS表達式從上到下執行。
私有作用域銷燬的問題:

3.閉包:
>函數執行會形成一個私有的作用域,讓裏面的私有變量和外界互補影響(相互不干擾、外面的無法直接獲取裏面的變量值),此時我們可以理解爲私有作用域把私有變量保護起來的,我們把這種保護機制稱之爲“閉包”。
棧內存:

作用域(全局作用域/私有作用域):提供一個供JS代碼執行的環境;

堆內存:

1.所有的引用數據類型,他們需要存儲的內容都在堆內存中(相當於一個倉庫,目的是存儲信息)。
2.對象會把健值對存儲進來。
3.函數會把代碼當做字符串存儲進來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章