码迷,mamicode.com
首页 > 其他好文 > 详细

闭包例子

时间:2015-05-08 13:14:05      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title></title>

</head>

<body>


<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>



闭包例子

标签:

原文地址:http://my.oschina.net/u/1992917/blog/412155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!