1. 哪些操作会造成内存泄漏?
内存泄漏是指向系统申请了内存后不能释放, 使得这片内存不能再被重新申请. 以下的操作会造成内存泄漏:
- 当页面中元素被移除或替换时,若元素绑定的事件没有被移除, 在IE中不会做出处理,此时要先手工移除事件, 不然会造成内存泄漏.
- 在IE中,如果循环引用的对象是DOM节点,会造成内存泄漏.
- 闭包时构成的循环引用会造成内存泄漏.
- 在IE中, 自动类型转箱转换会造成内存泄漏.
2. 编写一个函数,用于统计一个字符串中出现次数最多的字符和其出现的次数?
var str = 'asdfssaaasasasasaa';
function findMaxAppearChar () {
var arr = str.split('');
var obj = {};
var maxKey = '';
var maxIndex = 0;
for( var i = 0; i < arr.length; i++ ) {
if( obj[ arr[i] ] ){
obj[ arr[i] ] += 1;
}else{
obj[ arr[i] ] = 1;
}
}
for( key in obj ) {
if(obj[key] > maxIndex) {
maxKey = key;
maxIndex = obj[key];
}
}
return ('出现最多字符是' + maxKey + ',一共出现了' + maxIndex + "次");
}
3. 写一个获取非行内样式的函数,要求兼容IE低版本浏览器
function getStyle ( obj, attr ) {
if( obj.currentStyle ) {
return obj.currentStyle[ attr ]; //兼容IE低版本
}else{
return window.getComputedStyle( obj, null )[ attr ];
}
}
4. 闭包是什么? 有什么特性? 对页面有什么影响?
- 闭包是什么:闭包是指有权访问另一个函数作用域中变量的函数.
- 闭包有什么特性:
- 通过闭包,可以提供私有作用域.
- 函数执行完后,内部不会释放
- 通过闭包,可以实现带有存储函数运行时变量的函数.
- 对页面有什么影响:大量使用闭包会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
5. 解释jsonp的原理,以及为什么不是真正的Ajax
jsonp的原理是通过<script>标签向服务器发送请求,将前端函数名称作为参数传递到服务器,服务器接收到请求后将 JSON 数据作为该方法的参数,返回 JavaScript 文本,前端方法就可以拿到数据. 所以它并不是真正的Ajax, Ajax是异步的, 它是同步的.
6. 写一个reverseStr函数来实现字符串反转,如将 '12345678' 变成 '87654321'
var str = '12345678';
function reverseStr (str) {
return str.split('').reverse().join('');
}
7. 将数字 12345678 转化成 RMB形式 如: 12,345,678
function formatNumberToRMB ( number ) {
var str = number + '';
var arr = str.split('').reverse(); //[8,7,6,5,4,3,2,1]
var resultArr = [];
for( var i = 0; i < arr.length; i++ ) {
resultArr.push( arr[i] );
if( (i + 1) % 3 == 0 && (i + 1) != arr.length ){
resultArr.push(',');
}
}
return resultArr.reverse().join('');
}
8. window.location.search
和 window.location.hash
分别返回的是什么?
window.location.search
会返回当前页面查询字符部分, 也就是url中以?开始的部分.
window.loaction.hash
会返回当前页面锚点部分,也就是url中以#开始的部分.
9. 请简述javascript 中的垃圾回收机制
js在创建对象, 调用函数等操作的时候都会涉及到申请内存, 函数的内存由系统进行管理, 一旦调用结束后内存回收. 但是对象的内存由js引擎进行管理,js中对象具有动态特性,所以js引擎会带有垃圾回收机制.
垃圾回收机制具有释放不使用的内存和整合内存的作用. 然而因为会进行内存的整合, 所以在进行垃圾回收的时候会影响浏览器的性能.浏览器会使用一些算法来确定垃圾回收的时机, Chrome浏览器中采用的是分代回收的方法.
10. 请写一个阻止冒泡的兼容函数
function stopPropagation ( e ) {
e = window.event ? window.event : e;
if( e.stopPropagation ) {
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
网友评论