争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

BAT各大互联网公司javascript前端面试题总结

时间:2024/5/14作者:未知来源:争怎路由网人气:

function(context) { var self = this; return function() { return self.apply(context, arguments); }; } var func = User.getCount.bind(User); console.log(func());

11.原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不同?如何用原生JS实现Jq的ready方法?

window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。

$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。   

/*
 * 传递函数给whenReady()
 * 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用
 */
var whenReady = (function() { //这个函数返回whenReady()函数
    var funcs = []; //当获得事件时,要运行的函数
    var ready = false; //当触发事件处理程序时,切换为true

    //当文档就绪时,调用事件处理程序
    function handler(e) {
        if (ready) return; //确保事件处理程序只完整运行一次

        //如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好
        if (e.type === 'onreadystatechange' && document.readyState !== 'complete') {
            return;
        }

        //运行所有注册函数
        //注意每次都要计算funcs.length
        //以防这些函数的调用可能会导致注册更多的函数
        for (var i = 0; i < funcs.length; i++) {
            funcs[i].call(document);
        }
        //事件处理函数完整执行,切换ready状态, 并移除所有函数
        ready = true;
        funcs = null;
    }
    //为接收到的任何事件注册处理程序
    if (document.addEventListener) {
        document.addEventListener('DOMContentLoaded', handler, false);
        document.addEventListener('readystatechange', handler, false); //IE9+
        window.addEventListener('load', handler, false);
    } else if (document.attachEvent) {
        document.attachEvent('onreadystatechange', handler);
        window.attachEvent('onload', handler);
    }
    //返回whenReady()函数
    return function whenReady(fn) {
        if (ready) {
            fn.call(document);
        } else {
            funcs.push(fn);
        }
    }
})();

如果上述代码十分难懂,下面这个简化版:

function ready(fn){
    if(document.addEventListener) {        //标准浏览器
        document.addEventListener('DOMContentLoaded', function() {
            //注销事件, 避免反复触发
            document.removeEventListener('DOMContentLoaded',arguments.callee, false);
            fn();            //执行函数
        }, false);
    }else if(document.attachEvent) {        //IE
        document.attachEvent('onreadystatechange', function() {
            if(document.readyState == 'complete') {
                document.detachEvent('onreadystatechange', arguments.callee);
                fn();        //函数执行
            }
        });
    }
};

12.(设计题)想实现一个对页面某个节点的拖曳?如何做?(使用原生JS)

回答出概念即可,下面是几个要点

  • 给需要拖拽的节点绑定mousedown, mousemove, mouseup事件

  • mousedown事件触发后,开始拖拽

  • mousemove时,需要通过event.clientX和clientY获取拖拽位置,并实时更新位置

  • mouseup时,拖拽结束

  • 需要注意浏览器边界的情况

13.

BAT各大互联网公司javascript前端面试题总结

function setcookie(name, value, days) { //给cookie增加一个时间变量
      
    var exp = new Date();  
    exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000); //设置过期时间为days天
      
    document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}

function getCookie(name) {  
    var result = "";  
    var myCookie = "" + document.cookie + ";";  
    var searchName = "+name+" = ";  
    var startOfCookie = myCookie.indexOf(searchName);  
    var endOfCookie;  
    if (satrtOfCookie != -1) {    
        startOfcookie += searchName.length;    
        endOfCookie = myCookie.indexOf(";", startOfCookie);    
        result = (myCookie.substring(startOfCookie, endOfCookie));  
    }  
    return result;
}
(function() {  
    var oTips = document.getElementById('tips'); //假设tips的id为tips
      
    var page = {  
        check: function() { //检查tips的cookie是否存在并且允许显示
                
            var tips = getCookie('tips');    
            if (!tips   

关键词:BAT各大互联网公司javascript前端面试题总结




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版