两道js闭包题目;

2017-03-01  本文已影响0人  forLovn

两道面试题;

1:
 function test() {
             var value =2;
            return function (param) {
                alert(value * param);
                alert(this.value * param);
            }
        }
        value=3;
        var a = test();
        a(2);//4;6
解释下:一点闭包你里面的this指向window, 但当变量名相同且没有使用this关键字时,使用离它最近的那个变量;

2:
function test() {
             var value =2;
            return function (param) {
                value *=param;
                alert(value)
            }
        }
        value=3;
        var a = test();
        a(2);//4
        a(2);//8
解释如下:
垃圾回收是指:一个值,如果没有任何变量指向它,那么它就被回收。
你执行完一个函数,函数本身不会被回收。函数内部的变量是否回收要分情况:
如果是一般函数,没有闭包,那么函数内的局部变量就会被回收。
如果函数内有闭包,那么闭包会在函数执行完后仍然引用变量,也就是说变量不会被回收。

3:js闭包应用
<script>
        window.onload=function () {
            for(var i=1;i<=6;i++){
                document.getElementById("div"+i).onclick=(function (value){
                    return function(){
                        alert(value)
                    }
                })(i)
            }
        }
    </script>
上一篇下一篇

猜你喜欢

热点阅读