1.如何理解 JS 中的this关键字?
“this” 一般是表示当前所在的对象,但是事情并没有像它应该的那样发生。JS中的this关键字由函数的调用者决定,谁调用就this就指向哪个。如果找不到调用者,this将指向windows对象
var test = {
prop: 42,
func: function(){
return this.prop;
},
};
console.log (test.func()); // 42
2.解释一下变量的提升
变量的提升是JavaScript的默认行为,这意味着将所有变量声明移动到当前作用域的顶部,并且可以在声明之前使用变量。初始化不会被提升,提升仅作用于变量的声明。
var x = 1
console.log(x + '——' + y) // 1——undefined
var y = 2
3.什么是事件委托?
这是一种让父元素上的事件监听器也影响子元素的技巧。 通常,事件传播(捕获和冒泡)允许我们实现事件委托。 冒泡意味着当触发子元素(目标)时,也可以逐层触发该子元素的父元素,直到它碰到DOM绑定的原始监听器(当前目标)。 捕获属性将事件阶段转换为捕获阶段,让事件下移到元素; 因此,触发方向与冒泡阶段相反。 捕获的默认值为false。
4.如何区分声明函数和表达式函数
// 声明函数
function hello() {
return "HELLO"
}
// 表达式函数
var h1 = function hello() {
return "HELLO"
}
5.GET 和 POST 的区别,何时使用 POST?
GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在 2000个字符,有的浏览器是8000个字符;POST:一般用于修改服务器上的资源,对所发送的信息没有限制在以下情况中,请使用POST请求:
1.无法使用缓存文件(更新服务器上的文件或数据库)
2.向服务器发送大量数据(POST 没有数据量限制)
3.发送包含未知字符的用户输入时,POST比GET更稳定也更可靠
6. ajax 的最大的特点是什么?
1.ajax可以实现异步通信效果,实现页面局部刷新,带来更好的用户体验;
2.按需获取数据,节约带宽资源;
7.ajax 的缺点
1.ajax不支持浏览器back按钮
2.安全问题ajax暴露了与服务器交互的细节
3.对搜索引擎的支持比较弱
4.破坏了程序的异常机制
8.eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');
9. 事件委托是什么
利用事件冒泡的原理,让自己所触发的事件,让元素的父元素代替执行
10. call和apply的区别
call:Object.call(this,obj1,obj2,obj3)
apply:Object.apply(this,arguments)
11. 如何阻止事件冒泡
IE:ev.cancelBubble = true;
非IE:ev.stopPropagation();
12. 如何阻止默认事件
(1)return false;(2) ev.preventDefault();
13. 解释jsonp的原理,以及为什么不是真正的ajax
jsonp是动态创建script标签,回调函数,而ajax是页面无刷新请求数据操作
14.复杂数据类型如何转变为字符串
首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值
如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法
如果 toString 方法调用之后的返回值是一个基本数据类型,就返回这个值,
如果 toString 方法调用之后的返回值是一个复杂数据类型,就报一个错误。
15..多个页面之间如何进行通信
cookie
web worker
localeStorage 和 sessionStorage
16. 浏览器的滚动距离:
可视区域距离页面顶部的距离
scrollTop=document.documentElement.scrollTop||document.body.scrollTop
17. 可视区的大小:
(1)innerXXX(不兼容ie)
window.innerHeight 可视区高度,包含滚动条宽度
window.innerWidth 可视区宽度,包含滚动条宽度
(2)document.documentElement.clientXXX(兼容ie)
document.documentElement.clientWidth可视区宽度,不包含滚动条宽度
document.documentElement.clientHeight可视区高度,不包含滚动条宽度
18. 节点的种类有几种,分别是什么?
(1)元素节点:nodeType ===1;
(2)文本节点:nodeType ===3;
(3)属性节点:nodeType ===2;
19. 看下面代码,给出输出结果。
for(var i = 1; i <= 3; i++){ //建议使用let 可正常输出i的值
setTimeout(function(){
console.log(i);
},0);
};
答案:4 4 4。
原因:Javascript事件处理器在线程空闲之前不会运行。
20. 当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?
box.onlick= function(){}
box.addEventListener("click",function(){},false);
<button onclick="xxx()"></button>