js面试题整理

整理js面试题

  1. this指向
    this指向当前对象,主要是根据当前调用上下文来决定的,他默认指向的是window对象
    分为全局对象局部对象

    全局对象:this始终指向的是window对象

    局部对象:
    1. 在全局作用域下调用函数,他指向window
    2. 对象函数调用,调用谁 ,就指向哪个对象
    3. 使用new实例化对象,在构造函数中的this指向实例化对象
    4. 使用call与apply改变this指向

  2. js中的scope指的是什么

    每个函数都有自己的作用域,作用域就是定义了代码中一些变量、函数或者对象的可访问性。
    
    作用域也分为三大类:**全局、局部、块级**
    
    **全局**:在代码中任何地方都能访问到的
    			没有用var定义的变量就具有全局;
    			在最外层函数或者最外层函数之外定义的变量
    			window的对象(window.name、window.location)
    			
    **局部**:声明在函数内部的变量,最常见的就是在函数内部
    
    **块级**:es6中的块级作用域使用let、const声明
    		 为什么需要块级作用域:es5中只有全局与局部,会导致变量提升,内部的变量替换外部变量。
    
  3. js的变量提升:变量的声明会被提升到作用域的最顶上,提升只会提升变量的声明,不包括赋值。也就是说变量如果在声明之前使用,那么值就为undefined。

// w声明被提升,但是赋值没有
console.log(w); // undefined
var w = '22';
console.log(w) // '22'
  1. js的事件委托:将本来需要绑定在子元素上的事件,委托给其父元素,原理是事件冒泡

  2. js的事件传播:当触发子元素时候,就会通过嵌套顺序触发其父元素,一直到目标,也就是所谓的事件冒泡;事件捕获就是讲事件下移到元素,与冒泡阶段相反,并且默认值为false;

  3. js的strice mode:在代码编写之前添加use strict,整个js文件就按照严格模式去解析,所以不允许出现未声明的变量,会报错 xx is not defined。

"use strict";
a = 1;
console.log(a) //a is not defined
// 不能使用未声明的变量
  1. 解释js中的值与类型
    基本数据类型:Sring、Number、Null、Boolean、Undefined、Symbol
    引用数据类型:Array、Function、Object

  2. 阻止事件冒泡:event.cancelBubble、event.stopPropagation(不会阻止默认行为)、return false(jquery中阻止默认行为与冒泡,原生中只会阻止默认行为)

  3. window.onload:当js的文档与资源都加载完毕后调用的事件。

  4. 作用域的理解:从当前作用域开始查找,如果当前没有,就往上一层作用域进行查找,一直找到最外层,如果没有,就报错is not defined。

  5. 数组的pop、shift、unshift、push
    unshfit、push都是返回数组的下标
    pop、shift都是返回被删除的元素

  6. substring、substr区别
    substring(start,end) 截取到end前一个字符
    substr(start,length)

  7. split与join区别
    split是字符串按照特定的符号转换为数组
    join是数组按照指定符号转换为字符串

const str = 'ww,xx,tt';
console.log(str.split('t')); //[ 'ww,xx,', '', '' ]

const arr = [1,2,3,4];
console.log(arr.join('!')); // 1!2!3!4
  1. 数组去重
es6:
console.log(Array.from(new Set([1,2,3,4,2,1,3]))) // 1,2,3,4
console.log([...new Set([1,2,3,2,1,1,1])]) // 1,2,3

原生:
const arr = [1,2,3,4,3,2,1,2,3,4,5];
function noRepeat(arr){
    var temp = [];
    for(var i = 0 ; i < arr.length ; i ++){
        if(temp.indexOf(arr[i])== -1){
            temp.push(arr[i]);
        }
    };
    return temp;
};
console.log(noRepeat(arr))
  1. offsetWidth、clientWidth、scrollTop区别
    offsetWidth:占位宽,包含内容宽+padding+border
    clientWidth:可视宽,包含内容宽+padding
    scsrollTop:页面被卷曲的宽

  2. 解释一下事件流
    事件捕获阶段
    事件冒泡阶段
    目标阶段

  3. cookie与session区别
    存储位置不同:
    cookie的数据信息存放在客户浏览器
    session数据信息存放在服务器
    存储容量不同:
    单个cookie数据<= 4kb , 一个站点最多保存20个cookie
    session来说并没有上限,但出于服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。

  4. call与apply的区别
    都是用来改变this的指向
    call(this的指向 , 参数一,参数二),可以传入多个参数
    apply(this的指向,[参数一,参数二]),只能传入两个参数,所以第二个参数一般为数组

  5. 常见的http状态码
    404:请求失败
    401:请求要求身份验证
    403:服务器已经理解请求,但是拒绝执行他
    500:服务器无法完成对请求的处理
    503:服务器当前无法处理请求

  6. js哪些操作会引起内存泄漏
    1.闭包
    2.被遗忘的定时器或者回调
    3.意外的全局变量引起的泄露

  7. $(document).ready()与window.onload()区别
    前者是当文档加载完毕就执行
    后者是当文档与资源全部加载完毕执行

  8. js什么是跨域?如何解决跨域
    1.因为浏览器出于安全考虑,有同源策略,比如说,如果协议、域名、端口有一个不同就是跨域,ajax会请求失败,防止CSRF攻击。
    2.通过jsonp:script的src属性引入一个js文件,传递一个callback参数给服务端,然后服务器会将中国callback参数作为参数名来包裹住json数据。
    只支持get请求 ,也就是说如果想传给后台一个json格式的数据,状态码就会报错415,请求格式不正确。
    原理:ajax请求受同欢策略的影响,不允许进行跨域请求,而script的src属性中的链接却跨域访问跨域。

       **CORS**:在服务端设置Response Header响应头的Access-Control-Allow-Origin为对应的域名
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值