题目一
如何理解闭包,并举例说明
闭包是在一个函数内声明了另外一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破函数的作用域链。将函数内部的变量和方法传递到外部。
闭包的特性:
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