Javascript收集Web前端之路让前端飞

整理前端面试题(七) : JavaScript题目

2017-08-12  本文已影响389人  熠辉web3

1. 哪些操作会造成内存泄漏?

内存泄漏是指向系统申请了内存后不能释放, 使得这片内存不能再被重新申请. 以下的操作会造成内存泄漏:

  1. 当页面中元素被移除或替换时,若元素绑定的事件没有被移除, 在IE中不会做出处理,此时要先手工移除事件, 不然会造成内存泄漏.
  2. 在IE中,如果循环引用的对象是DOM节点,会造成内存泄漏.
  3. 闭包时构成的循环引用会造成内存泄漏.
  4. 在IE中, 自动类型转箱转换会造成内存泄漏.

内存泄漏实例见: http://www.jb51.net/article/37685.htm


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. 闭包是什么? 有什么特性? 对页面有什么影响?

  1. 闭包是什么:闭包是指有权访问另一个函数作用域中变量的函数.
  2. 闭包有什么特性:
    • 通过闭包,可以提供私有作用域.
    • 函数执行完后,内部不会释放
    • 通过闭包,可以实现带有存储函数运行时变量的函数.
  3. 对页面有什么影响:大量使用闭包会造成网页的性能问题,在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.searchwindow.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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读