閉包例子

<!DOCTYPE html>html

<html>閉包

<head>函數

    <meta charset="UTF-8">設計

    <title></title>htm

</head>對象

<body>ip


<script>內存

    //設計一個函數達到這樣的效果fun(1)()()每加一個括號傳入的值都自動加1,最後輸出這個值。談談你對重寫對象的valueOf,toString後,valueOf,toString調用順序的理解,以及你對閉包得出理解。作用域


    var counterObj = {};字符串

    counterObj.count =function(i){

        function countInner(){

            i++;

            return countInner;

        }

        countInner.valueOf = function(){

            console.log('valueOf');

            return i;

        }

        countInner.toString = function(){

            console.log('toString');

            return i;

        }

        return countInner;

    }

    var result = counterObj.count(2)()();  //result爲countInner函數

    result()()();

    console.log(result) //這裏要顯示字符串,所以會先調用countInner的toString方法;但此處輸出結果後又調用了valueOf方法,對此不是很理解


    //1. 在須要進行表達式運算時會先求值,所以會調用valueOf,若是沒有重寫valueOf,會調用toString

    //2. 在須要進行字符串顯示時會調用toString,若是沒有重寫toString,也不會調用valueOf

    //3. 強制使用String(),會調用toString方法,若是沒有重寫toString,也不會調用valueOf;強制使用Number()會調用valueOf方法,若是沒有重寫valueOf,會調用toString

    //4. 閉包,即函數裏面嵌套函數,因爲做用域鏈,內層函數能夠訪問外層函數的局部變量;一般狀況下,當一個函數調用完後,js的垃圾回收機制,會釋放函數內部局部變量的內存空間,可是當造成閉包

    //   而且將內層函數返回並賦給另外一個變量時,此時js垃圾回收機制不知道咱們什麼時候會引用此變量,所以不會回收內層函數內引用的外層函數局部變量的內存空間,此時咱們能夠在函數外面操做函數內部的局部變量。

</script>

</body>

</html>

相關文章
相關標籤/搜索