简述js闭包理解及其优缺点?
解析:
什么是javascript闭包?
javascript允许使用内部函数,内部函数可以访问它们所在的外
部函数中声明的所有局部变量、参数和声明的其他内部函数。当
其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
闭包的好处:
(1 )不增加额外的全局变量,
( 2 )执行过程中所有变量都是在匿名函数内部。
闭包的缺点:
(1 )由于闭包会使得函数中的变量都被保存在内存中,内存消
耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE
中可能导致内存泄露。解决方法是,在退出图数之前,将不使用
的局部变量全部删除。
(2 )闭包会在父函数外部,改变父函数内部变量的值。所以,
如果你把父函数当作对象( object )使用,把闭包当作它的公用
方法( Public Method ) , 把内部变量当作它的私有属性( priv
ate value) , 这时一定要小心。不要随便改变父函数内部变量的值。
apply和call的用途是什么?有什么区别?
call , apply都属于Function.prototype的一个方法,它是Jav
aScript引擎内在实现的,因为属于Function.prototype ,所以
每个Function对象实例(就是每个方法)都有call , apply属性。既
然作为方法的属性,那它们的使用就当然是针对方法的了,这两
个方法是容易混淆的,因为它们的作用一样,只是使用方式不
同。
语法: focall(this, arg1 arg2,arg3) == foo.apply(this, arg
uments) == this.foo(arg1, arg2, arg3);
相同点:两个方法产“生的作用是完全一样的。
不同点:方法传递的参数不同。
function a(){return 1;} var a = 7;alert(a);弹出框的值为:
7
function a(){return 1;} var a;alert(a);弹出框的值为:
一个函数Object
JavaScript如果实现继承?
通过原型和构造器
谈谈对this对象的理解
this是一个关键字,随着函数使用场合不同,this的值会发生变化,但是有一个原则:this指向的是调用函数的那个对象;this一般情况下是全局对象,如果作为方法调用,那么this就是指这个对象;
JavaScript垃圾回收原理
在JavaScript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
如果两个对象相互引用,而不再被第三者所引用,那么这两个互相吸引的对象也会被回收;
谈谈对作用域链的理解
作用域链是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。
new操作符具体干了什么?
1、创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
2.属性和方法被加入到this引用的对象中。
3、新创建的对象由this所引用,并且最后隐式的返回this
js对象的深度克隆
JavaScript原型,原型链,有什么特点?
原型对象也是普通的对象,是对象-一个自带隐式的_ proto_
属性,原型也有可能有自己的原型,如果一个原型对象的原型不为nul的话,我们就称之为原型链。
原型链是由- -些用来继承和共享属性的对象组成的(有限的)
对象链。
evel是什么?
是把对应的字符串解析成JS代码并运行;应该避免使用evel,不安全且非常消耗性能;
JavaScript对象的几种创建模式
1,工厂模式2,构造函数模式
3,原型模式4,混合构造函数和原型模式
5,动态原型模式6,寄生构造函数模式
7,稳妥构造函数模式
JavaScript继承的6种方法
1,原型链继承2,借用构造函数继承
3,组合继承(原型+借用构造)4,原型式继承
5,寄生式继承6,寄生组合式继承
从字符串var a = '2015是最重要的一年'截取出
- substring (str, end)str是必须输入,必须是正值;end是可选的必须是正值;
根据字面意思,str为截取的开始位置,字符串的第一个字符位置为0; end为截取的结束位置.substring() 方法返回的子串包括start处的字符,但不包括end 处的字符。
slice(str, end)
slice()方法的用法基本跟substring-致,但slice 0的参数允许负值;
ps:str必须比end小,否则返回空字符串;substr (str, length)
str是必须输入,str允许为负值,用法跟slice()一样;length是截取字符串的长度;
用于判断输入的某个字符是否为空的方法
if(s==null||s.equals(''));
if(s==null||s.length()<=0);
if(s==null||s.isEmpty());
document.write和innerHTML的区别?
document.write只能重绘整个页面,innerHTML可以重绘页面的一部分;
Ajax是什么?
Ajax是一种用于创建快速动态网页的技术。相当于异步JavaScript和XML;
传统的网页(不使用AJAX)如果需要更新内容,必须重新加载整个网页页面;
Ajax的优势?
1.通过异步模式,提升了用户体验
2.优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
Ajax最大的特点是什么?
可以实现局部刷新;
Ajax的缺点是什么?
1、ajax不支持浏览器back按钮。2、安全问题AJAX暴露了与服务器交互的细节。
3.对搜索弓|擎的支持比较弱。4、破坏了程序的异常机制。5、不容易调试。
css 动画和js 动画的差异
代码复杂度,js 动画代码相对复杂一些
动画运行时,对动画的控制程度上,js 能够让动画,暂停,取消,终止,css 动画不能
添加事件
动画性能,js 动画多了一个 js 解析的过程,性能不如 css 动画好
Javascript 的本地对象,内置对象和宿主对象分别是什么
本地对象 ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象"。简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。它们包括:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
内置对象 JS中内置了17个对象,常用的是Array对象、Date对象、正则表达式对象、string对象、Global对象
宿主对象 由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
事件冒泡与事件捕获的区别?
事件冒泡:由最具体的元素(目标元素)向外传播到最不具体的元素
事件捕获:由最不确定的元素到目标元素
复杂数据类型如何转变为字符串?
首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值
如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法
如果 toString 方法调用之后的返回值是一个基本数据类型,就返回这个值,
如果 toString 方法调用之后的返回值是一个复杂数据类型,就报一个错误。
Ajax 和 Fetch 区别
ajax 是使用 XMLHttpRequest 对象发起的,但是用起来很麻烦,所以 ES6 新规范就有了 fetch ,fetch 发一个请求不用像 ajax 那样写一大堆代码。
使用 fetch 无法取消一个请求,这是因为 fetch 基于 Promise,而 Promise 无法做到这一点。
在默认情况下,fetch 不会接受或者发送 cookies
fetch 没有办法原生监测请求的进度,而 XMLHttpRequest 可以
fetch 只对网络请求报错,对 400,500 都当做成功的请求,需要封装去处理
fetch 由于是 ES6 规范,兼容性上比不上 XMLHttpRequest
冒泡排序算法