js闭包相关知识点

657 阅读1分钟

题目一

如何理解闭包,并举例说明

闭包是在一个函数内声明了另外一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破函数的作用域链。将函数内部的变量和方法传递到外部。

闭包的特性:
1.函数内再嵌套函数。
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收。
举例说明:
var count = 10;
function add(){
    var count = 0;
    return function(){
        count += 1;
        alert(count);
    }
}
var d = ddd();
d();    // 1
d();    // 2

JS哪些操作会造成内存泄露

答案:

1.意外的全局变量引起的内存泄漏。
function leak(){
    leak = "xxx";   leak成为一个全局变量,不会被回收。
}
2.闭包引起的内存泄漏。
3.没有清理的DOM元素引用。
4.被遗忘的定时器或回调。
5.子元素存在引起的内存泄漏。

题目二

console.log('x' in window); var x; x = 0;

答案:true

解析:预解析,var x;变量提升。打印是判断x是不是存在在window里 。x声明未赋值为undefined。window里有x。所以为true。最后值为0.

闭包 有权访问另一个函数作用域里变量的函数

function box(){
    return function(){
        return 'lee';
    }
}
alert(box); //function box(){ return function(){ return 'lee'}}
alert(box());   //function(){ return 'lee'}
alert(box()()); //lee