一 . javaScript+jQuery
1. 举例说明JavaScript内存泄漏的场景,至少3种
(不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak))
1) 全局变量引起的内存泄漏
一个未声明变量的引用会在全局对象中创建一个新的变量。在浏览器的环境下,全局对象就是 window。
function func(){
a=123; //a为全局变量,不会被回收
}
等价于
function func(){
window.a=123; //a为全局变量,不会被回收
}
为了防止这种错误的发生,可以在你的 JavaScript 文件开头添加 'use strict'; 语句
2)闭包引起的内存泄漏
(function(){
var a=123;
return function(){ console.log(a) };
})()
3)定时器或回调函数引起的内存泄漏
当不需要setInterval或者setTimeout时,定时器没有被clear,定时器的回调函数以及内部依赖的变量都不能被回收,造成内存泄漏。
function func(){
var i=0;
var timer=setTimeout(function(){
console.log(i++);
},1000);
}
func();
4)dom清空或删除时,事件未清除导致的内存泄漏
<div id="container">
</div>
$('#container').bind('click', function(){
console.log('click');
}).remove();
// zepto 和原生 js下,#container dom 元素,还在内存里jquery 的 empty和 remove会帮助开发者避免这个问题
<div id="container">
</div>
$('#container').bind('click', function(){
console.log('click');
}).off('click').remove();
//把事件清除了,即可从内存中移除
2. js常用内置对象
Number对象、String对象、Array对象、Date对象、Math对象、正则表达式对象、Function对象。
3. 你如何获取浏览器URL中查询字符串中的参数?
测试地址:http://xxx.xxxx.xx/kt?channelid=123&name=xiaoming&age=23
方法一:
function getURL(){
var URL = window.location.href; //获取地址栏的地址
var arg = URL.split('?');
if(arg[0] == URL){ //无参数
return "";
}
//对?后面的参数进行处理
var arr = arg[1].split('&');
var params = {};
for(var i = 0;i< arr.length;i++){
var p = arr[i].split('=');
params[arg[0]] = p[1];
}
return params;
}
var url = getURL(); // obj
console.log(url['age']); // 打印结果:23