新增js面试题
1.jsonp解决跨域的原理
利用script标签中的src属性,src属性不存在跨域问题,在src中引入完整的跨域引用文件,服务器输出的json数据并执行回调。
jsonp是请求后台包装好的一段json,并把数据放在回调函数中,返回一个js文件,引入并下载js后,调用这个回调函数访问数据。
总结:
动态添加script标签来调用服务器提供的js脚本文件。
2.深浅拷贝
- 浅拷贝:拷贝基本类型的数据,复制的是指向某个对象的指针,本不是对象本身,新旧对象依然在同一内存中,修改复制的对象,源对象也会被改变。
方法:- 1.如果对象有多层,Object.assign()、Object.create()、对象的解构赋值;
- 2.如果数组中有对象,可以使用concat()、slice()实现浅拷贝;
- 深拷贝:能够实现真正意义上的数组和对象的拷贝,递归调用”浅拷贝“。深拷贝会另外创造一个一模一样的对象,新对象和源对象不在同一内存中,修改新对象,源对象不会被改变。
方法:- 1.若对象只有一级 (根级),Object.assign()、Object.create()、对象的解构赋值,可实现深拷贝;
- 2.若拷贝数组是纯数据(不含对象),可以通过concat()、slice()实现深拷贝;
- 3.JSON.stringify()把对象转化为字符串,再用JSON.parse()把字符串转成新对象,可以实现对象的深拷贝。
3.绑定事件的几种方法
举例点击事件
1.
<div onclick="fun()"></div>
var oBox = document.getElementById("container");
oBox.onclick = function(){}
3.事件绑定
addEventListener(事件类型,事件处理函数,是否捕获默认false);
ie:标签.attach(事件类型,事件处理函数);
removeEventListener()删除事件
ie:标签.detachEvent()
oBox.addEventListener("click",fn(),false);