-
数组属性
-
数组常用方法
-
String 对象方法
-
数组去重
-
创建对象的方式
-
字面量的方式
-
js继承
-
数组最常用遍历方法
-
js执行机制
-
JavaScript是一门单线程语言。
js是单线程,那就是在执行代码的时候是从上往下执行的
Event Loop(事件循环)是JavaScript的执行机制。
-
-
定时器的运用
-
var a = 1000; setInterval(function() { console.log(a);//输出的a a+=1000; }, a)
- 如何使定时器的时间间隔增加
- 定时器是window方法,它的this指向window,所有输出的a是window的a,a也会不断累加,但是时间间隔a是定时器函数的a,恒定不变
var a=1000; function fn() { var time=setInterval(function() { a += 1000; console.log(a); // fn(); clearInterval(time) fn() // 为什么一开始a不会变化,因为作用域不同 // 为什么定时器的a会变化,因为fn重新调用了,但此时的a与fn处于同一作用域 }, a) } fn()
-
js创建对象的方式
- Object构造函数创建
- 使用对象字面量表示法
var
Person = {};``//相当于var Person = new Object();
其实1和2是一种 - 使用工厂模式创建对象
- 使用构造函数创建对象
- 原型创建对象模式
- 组合使用构造函数模式和原型模式
-
js继承的方式
- 原型链继承
- 借用构造函数继承
- 组合继承(组合原型链继承和借用构造函数继承)(常用)
- 原型式继承
- 寄生式继承
- 寄生组合式继承(常用)
-
递归的运用
-
如何理解闭包
-
我在问这个问题的时候,我其实并不想听到对方说
闭包就是能够访问到其他函数作用域
闭包就是能够将变量保存在内存当中
之类这样的话的。
因为别人从网上硬记下来也能这么说,而且这些也都只是闭包的现象。我更希望对方能跟从JS的执行开始讲、一个函数执行前后的内存回收过程,再阐述闭包形成的原因,这样又会导致什么问题,应该怎么解决。最后再讲有什么用途,或者说自己曾经有什么需求需要闭包来实现。
- 闭包就是能够读取其他函数内部变量的函数
- 闭包的优点:闭包可以读取函数内部的变量,可以让变量的值始终保持在内存中。
- 闭包的缺点:
面试答题:
-
什么是闭包
- 函数和函数内部能访问到的变量(也叫环境)的总和,就是一个闭包。
-
闭包的特点
- 声明在一个函数中的函数,函数嵌套函数,叫做闭包函数
- 函数内部可以引用外部的参数和变量
- 参数和变量不会被垃圾回收机制回收
-
闭包的用途
- 主要是为了设计私有的变量和方法,可以避免全局变量的污染,方便调用上下文的局部变量 加强封装性
- 主要可以访问其他函数内部变量
- 保护变量不被内存回收机制回收
-
闭包的缺点
- 增大内存的使用量,常驻内存,,使用不当会造成内存泄漏
-
曾经的需求
- 如果你调用一个对象里的函数,并且函数里再返回一个函数,返回值有this,此时this就指向了window,可以利用闭包特性,因为父级函数的this指向该对象,在父级函数里定义一个that=this,this就会指向该对象而不会指向window了,也可以使用箭头函数解决
- 创建自定义函数的时候,基本都要有传参,传参和返回的函数就构成了闭包 (取值和排序)
-
解决闭包造成的内存泄露
-
在退出函数之前,将不使用的局部变量全部删除。可以使变量赋值为null;
-
这段代码会导致内存泄露 window.onload = function(){ var el = document.getElementById("id"); el.onclick = function(){ alert(el.id); } } 解决方法为 window.onload = function(){ var el = document.getElementById("id"); var id = el.id; //解除循环引用 el.onclick = function(){ alert(id); } el = null; // 将闭包引用的外部函数中活动对象清除 }
-
避免变量的循环赋值和引用
-
-
-
如何理解变量的作用域
- 变量在函数外定义,即为全局变量,全局变量就是在页面内都可以调用的变量,全局变量有 全局作用域: 网页中所有脚本和函数均可使用
- 变量在函数内声明,只能在函数内部访问,变量为局部作用域,
-
简述同步和异步的区别
-
所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。
https://blog.csdn.net/qq_22855325/article/details/72958345
同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式).同步强调的是顺序性.谁先谁后.异步则不存在这种顺序性.
同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。
异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。
-
-
写一个函数,清除字符串前后的空格(兼容所有浏览器)
- function trim(str) {
if (str && typeof str === "string") {
return str.replace(/(^s)|(s)$/g,""); //去除前后空白符
}
}
- function trim(str) {
-
箭头函数 this指向
-
如何判读当前使用的浏览器
-
避免按钮多次点击请求ajax
-
原型及原型链
-
添加,移除,移动,复制,创建,查找节点
-
线程和进程的区别
-
获取浏览器url中查询字符串的参数
-
js字符串函数
-
如何确定一个变量时不是字符串类型
-
比较typeof和instanceof
-
判断一个字符串中出现最多的字符,并统计出现的次数
-
documentload和documentready区别
-
js中typeof放回的数据类型
-
事件绑定和普通事件区别
-
js中的this
-
如何给ajax请求的数据绑定事件
-
documentload和documentready区别
-
列举三种强制类型转换和两种隐式转换
-
jQuery中$.bind(),$.on(),$.live()的异同点
-
bind方法要在,js动态插入标签之后,才可使用,要是在之前写入的话,不可生效。
而on方法,无论前后皆可使用,因为他把事件写在了父及上,利用冒泡,实现事件委托
-
-
jQuery中callback的作用
- jquery中callback是当某一个事件方法完成后在回调时候来执行其他的操作
-
jQuery将变量对象转化成json字符串的方法
-
创建dom的几种方式 优劣点