1. 程式人生 > 實用技巧 >函式的兩個階段做的事情以及 一個不銷燬的函式執行空間

函式的兩個階段做的事情以及 一個不銷燬的函式執行空間

函式的兩個階段做的事情
+函式定義階段 1.開闢一個空間 2.把程式碼一摸一樣的儲存進去(不解析變數) 3.把空間地址賦值給變數名(函式名) +函式呼叫階段 1.按照地址找到空間 2.形參賦值 3.預解析 4.**在記憶體中單獨開闢一個空間** 5.**把之前儲存的程式碼拿出來放在這個空間中執行(解析變數)** (函式的每一次執行都會生成一個函式執行空間 6.**把新開闢出來的執行空間銷燬** 一個不銷燬的函式執行空間 +當函式內部返回了一個複雜資料型別的時候 +並且在函式外部還有變數在接受的時候 +這個函式執行空間不會銷燬,會一直存在
這個不銷燬的空間能不能銷燬?
+可以銷燬 +當外部接受的變數不在引用著函式執行空間內部的這個複雜資料型別的時候 +這個函式執行空間就銷燬了
<script>
    function fn() {
      var obj = {
        name: 'Jack',
        age: 18
      }

      return obj
    }

    var res = fn()
    // console.log(res) // 物件

    // 函式的每一次執行都會生成一個函式執行空間,故res2指向一個新的執行空間
    var res2 = fn()
    // console.log(res2) // 物件
// 修改了 res 這個物件內部的 name 成員 res.name = 'Rose' console.log(res) // name => Rose console.log(res2) // name => Jack // 當這個 res 不在執行函式的執行空間內部的複雜資料型別的時候 // 這個函式執行空間就銷燬了 // res = 100 </script>