Javascript閉包解析----------------v客學院技術分享

跟java,php等編程語言同樣,javascript也採用詞法做用域,簡單的來講就是函數的執行依賴於變量的做用域,這個做用域是在函數定義時決定的,而不是函數調用時決定的。爲了實現這種詞法做用域,還必須引用當前的做用域鏈。函數對象能夠經過做用域鏈相互關聯起來,函數體內部的變量均可以保存在函數做用域內,這種特性稱之爲「閉包」。javascript

理解閉包首先要了解嵌套函數的詞法做用域規則。以下圖所示:php

show函數聲明瞭一個局部變量,並定義了一個函數f,函數f返回了這個變量的值,最後將函數f放入執行結果返回。前端

如今咱們來改動下代碼,看看結果又會是什麼?java

       在上面的代碼中,將函數內的一對圓括號移動到了f()後。f()如今僅僅返回函數內嵌套的一個函數對象,而不是直接返回結果。在定義函數的做用域外面,調用這個嵌套的函數(包含最後一行代碼的最後一對圓括號)會發生什麼事情呢?web

 

    想必大多數的人都知道告終果,是返回198,而不是v客學院。,由於嵌套的函數f()定義在這個做用域鏈裏,其中的變量a必定是局部變量,無論在什麼時候何地執行f(),這種綁定在執行f()時依然有效。簡言之:閉包的這個特性能夠捕捉到局部變量(和參數),並一直保持下來,看起來想這些變量綁定到了在其中定義他們的外部函數。編程

(php開發,web前端,ui設計,vr開發專業培訓機構,v客學院版權全部,轉載請註明出路,謝謝!!!)閉包

相關文章
相關標籤/搜索