web前端面试题第一天

173 阅读3分钟

1.HTML中src与href的区别

src(全称source):意为"来源"。一般作为媒体元素的映射路径,例如 图片和脚本

(1)图片<img src='../img/1.png'>

(2)脚本 <script src='index.js'></script>

src加载媒体资源时,其他页面的资源会暂停处理,因此它是堵塞的(src只是媒体资源的路径映射)

href(全称hypetext reference):意为”超文本引用“。它是非堵塞的,主要用来链接一个页面,或者加载一个css样式。

总结:src引入的一般为媒体元素或脚本,这些是需要在页面中加载出来的。href为资源的引入。它并不需要把真实的资源呈现到页面上

2.js脚本为什么使用src引用而不是href

js设计之初,设计者认为js脚本会改变dom元素,因此要和页面一起加载,css不会改变dom元素,因此使用href。 页面堵塞和资源大小无关,和dom元素的改变有关

3.sessionStorage、localstorage及cookie的区别

由于http是一个无状态的协议,不能保存每次的请求状态,因此要给客户端增加一个cookie保存客户端状态。cookie的作用主要用于用户识别和状态管理(常用于网站的记住密码)。cookie通常被携带在http请求头中 安全性

secure:仅在https安全通信时才会发送cookie

httponly :使用cookie不能被js脚本访问(防止跨站脚本攻击对cookie信息的窃取)

samesite:防止跨站伪造的攻击 webStorage 是cookie 的进化,它包含sessionStorage和localStorage

html5提供了两种保存客户端状态的新方法。分别为sessionStorage和localStorage,他们都挂载在window下 webStorage 本地存储,它的数据不是由服务器传递的,可以存储大量的数据,而不影响网站性能

localstorage 数据是永久性的,即使关闭浏览器数据也不会丢失,除非主动删除,如果想要设置过期时间,需要单独封装

sessionstorage 最多存储5mB,会话关闭后数据就会消失

(1)cookie的基本使用

//1.实例化一个cookie
var c=new cookie("username",'tom');
//2.设置过期时间1天
c.setMaxAge(24*60*60);
//3.保存cookie到客户端
response.addcookie(c);

(2)sessionStorage的基本使用(使用 sessionStorage 创建一个本地存储的 name/value 对)

//1.保存数据
sessionStorage.setItem('name','tom');
//2.获取数据
sessionStorage.getItem('name');
//3.移除数据
sessionStorage.removeItem('name');
//4.清除所有数据
sessionStorage.clear();

(3)localStorage的基本使用(注意localStorage的值为string 而不是json)

var s=window.localStorage
//1.写数据
s.a=1;
s['b']=2;
s.setItem("c","3");
//读数据
s.a;
s[b];
s.getItem('c');
//删除localStorage中所有的内容
s.clear();
//删除某一个
s.removeItem('a');

4.apply、bind、call的区别

三者的共性:都可以改变this执行,且第一个参数都是this的指向对象,它们都采取后续传参 不同点:call、bind都是单个传递,apply可以传递数组 执行方面:call、apply都是自动执行,bind需要手动执行 1.call()、apply()、bind() 都是用来重定义 this 这个对象的!

<script>
        var obj = {
            name: '齐天大圣',
            say: function () {
                console.log(this);
                console.log("我是花果山" + this.name);
            }
        }
        var obj1 = {
            name: '天蓬元帅',
        }
        obj.say.call(obj1);
        obj.say.apply(obj1);
        obj.say.bind(obj1)();//bind 返回的是一个新的函数,你必须调用它才会被执行
    </script>

2.对比传参


 <script>
        var obj = {
            name: '齐天大圣',
            say: function (t, f) {
                console.log(this);
                console.log("我是花果山" + this.name + '我从' + f + '来,去往' + t + '取经');
            }
        }
        var obj1 = {
            name: '天蓬元帅',
        }
        obj.say.call(obj1, "西天", '东土大唐');
        obj.say.apply(obj1, ["西天", '东土大唐']);
        obj.say.bind(obj1, "西天", '东土大唐')();//bind 返回的是一个新的函数,你必须调用它才会被执行
    </script>

5.什么是节流、防抖

节流、防抖主要用来解决一下问题

1.高频触发:用户的行为,高频的发生

2.忽略过程:触发过程对用户来说不必处理,只处理最近一次的用户操作。