### 2018年第二期前三周复习
1. 写出你所熟知的ES6新语法,说出它们和ES5的区别!
2. 请说出你对 “重排和重绘读写分离” 的理解!
3. 写出下面代码运行的结果
~~~javascript
1.var str='abc123',
2. num=parseFloat(str);
3.if(num===NaN){
4. alert(NaN);
5.}else if(num===123){
6. alert(123);
7.}else if(typeof num==='number'){
8. alert('number');
9.}else{
10. alert('str');
11.}
~~~
4. 写出代码执行的结果
~~~javascript
1.var a='abc'+123+456;
2.alert(a);
3.
4.var b='456'-'123';
5.alert(b);
6.
7.var c=1,
8. d='1';
9.var f=c>d?(c<d?c:d):(c==d?c:d);
10.alert(f);
~~~
5. 用户昵称规定只能是“数字、大小写字母”组成,而且不能少于2位,也不能超过20位,写个正则匹配这个需求
6. 谈谈你对面向对象的理解!
7. 写出代码运行结果
~~~javascript
1.var point={
2. x:10,
3. y:20,
4. moveTo:function(x,y){
5. var moveX=function(x){ this.x=x; }
6. var moveY=function(y){ this.y=y; }
7. moveX(x);
8. moveY(y);
9. }
10.};
11.point.moveTo(100,200);
12.console.log(point.x,point.y);
~~~
8. 分析代码写结果
~~~javascript
1.function fun(){
2. this.a=10;
3. this.b=function(){
4. alert(this.a);
5. }
6.}
7.fun.prototype={
8. b:function(){
9. this.a=20;
10. alert(this.a);
11. },
12. c:function(){
13. this.a=30;
14. alert(this.a)
15. }
16.}
17.var my_fun=new fun();
18.my_fun.b();
19.my_fun.c();
~~~
9. 分析代码写结果
~~~javascript
1.var n=2;
2.function a(){
3. var n=3;
4. function b(m){
5. alert(++n+m);
6. }
7. b(4);
8. return b;
9.}
10.var c=a(5);
11.c(6);
12.alert(n);
~~~
10. 谈一下你对作用域链和原型链的理解
11. 实现 一个$attr(domId,name,value)遍历id是domId的,内部属性为name且值为value的元素?
12. 实现数组去重你都有哪些办法?
13. 说出你所掌握的算法
14. 写出你掌握的JS继承方式,项目中什么时候你用到了继承?
15. JS中有一个insertBefore方法,目的是实现把新元素插入到指定元素之前,现在你实现一个 InsertAfter 方法,把新元素插入到指定元素之后!
~~~javascript
1.function insertAfter(newEle,originEle){
2. //=>newEle:新插入的元素
3. //=>originEle:指定的老元素
4.}
~~~
16. 英文字母汉字组成的字符串,用正则给英文单词前后加空格
17. jQuery的原理,怎么扩展插件
18. 看代码,回答问题
~~~javascript
1.for(var i = 0;i<5;i++){
2. setTimeout(function(){
3. console.log(i)
4. },1000);
5.}
6.这段代码输出什么?怎么才能输出01234?
~~~
19. 分析代码写结果
~~~javascript
1.var a = {n:4};
2.var b = a;
3.b.x = a = {n: 10};
4.console.log(a.x);
5.console.log(b.x);
~~~
20. 你了解过闭包吗?
~~~javascript
1.var fullName='language';
2.var obj={
3. fullName:'javascript',
4. prop:{
5. getFullName:function(){
6. return this.fullName;
7. }
8. }
9.};
10.console.log(obj.prop.getFullName());
11.var test=obj.prop.getFullName;
12.console.log(test());
~~~
~~~javascript
1.let a = 3,
2. b = 4;
3.function A(a) {
4. A = function (b) {
5. alert(a + (--b));
6. };
7. alert(++a);
8.}
9.A(5);
10.A(6);
~~~
23.
~~~javascript
1.window.val = 1;
2.let json = {
3. val: 10,
4. dbl: function () {
5. this.val *= 2;
6. }
7.};
8.json.dbl();
9.let dbl = json.dbl;
10.dbl();
11.json.dbl.call(window);
12.alert(window.val + json.val);
~~~
24.
~~~javascript
1.(function () {
2. let val = 1;
3. let json = {
4. val: 10,
5. dbl: function () {
6. val *= 2;
7. }
8. };
9. json.dbl();
10. alert(json.val + val);
11.})();
~~~
25.
~~~javascript
1.let test = (function (i) {
2. return function () {
3. alert(i *= 2);
4. }
5.})(2);
6.test(5);
~~~
26.
~~~javascript
1.let n = 2,
2. fn = () => {
3. this.n *= 3;
4. n++;
5. return m=>console.log((++n)+m);
6. };
7.var f = fn(4);
8.f(5);
9.fn(4)(5);
10.f(6);
11.console.log(n);
~~~
27. 忽略报错阻碍代码的执行
~~~javascript
1.let Fn = function (x = 0, y = 0) {
2. this.x = x;
3. this.y = y;
4. this.getX = function () {
5. console.log(this.x);
6. }
7.};
8.Fn.prototype.getX = function () {
9. console.log(this.x);
10.};
11.let f1 = new Fn;
12.Fn.prototype = {
13. getY: function () {
14. console.log(this.y);
15. }
16.};
17.let f2 = new Fn(1, 2);
18.console.log(f1.constructor===f2.constructor);
19.f1.getX();
20.f1.getY();
21.f1.__proto__.getX();
22.f1.__proto__.getY();
23.f2.getX();
24.f2.getY();
25.f2.__proto__.getX();
26.f2.__proto__.getY();
~~~
28. 写出输出结果,说出原因
~~~javascript
1.let fn1=function(){alert(1)},
2. fn2=function(){alert(2)};
3.fn1.call(fn2);
4.fn1.call.call(fn2);
~~~
29. 如下一个字符串 “54389”,要求将字符串中的阿拉伯数字替换成我们的中文大写数字”伍肆叁捌玖”,请使用正则的方式进行处理
30. 在javascript对象上定义一个repeatify函数,这个函数接受一个整数参数,来明确子字符串需要重复几次,这个函数要求字符串重复指定的次数,比如:’abc’.repeatify(3);//”abcabcabc”
31. `var str='hello<img src="haha.png" alt="哈哈"/>world';`正确匹配输出’hello\[哈哈\]world’
32. 一个url 后面好多key-value 如localhost?key=val&key2=val2&key3=val3 封装一个函数 getParam(‘key’) 通过key获得相应等号后面的值.
33. call、apply、bind的区别
34. 有两个升序数组,然后将他们合为 一个数组并进行升序排序?
35. 瀑布流的实现原理
36. 图片延迟加载怎么实现
37. 写出完整的验证函数
> 1)长度不能小于6位
> 2)首字母必须是字母
> 3)合法字符只能是数字、字母、下划线
38. 使用jquery实现点击按钮弹出一个对话框(对话框在整个页面正中间,并且最初页面中没有任何的HTML标签)?
39. 怎么避免全局变量的污染?
~~~javascript
1.function Foo() {
2. getName = function () {
3. console.log(1);
4. };
5. return this;
6.}
7.Foo.getName = function () {
8. console.log(2);
9.};
10.Foo.prototype.getName = function () {
11. console.log(3);
12.};
13.var getName = function () {
14. console.log(4);
15.};
16.function getName() {
17. console.log(5);
18.}
19.Foo.getName();
20.getName();
21.Foo().getName();
22.getName();
23.new Foo.getName();
24.new Foo().getName();
25.new new Foo().getName();
~~~
41.
~~~javascript
1.在函数式编程当中有一个很重要的概念就是函数组合,实际上就是把处理数据的函数像管道一样连接起来,然后让数据穿过管道得到最终的结果。例如:
2.const add1 = (x) => x + 1;
3.const mul3 = (x) => x * 3;
4.const div2 = (x) => x / 2;
5.div2(mul3(add1(add1(0)))) //=>3
6.
7.而这样的写法可读性明显太差了。我们可以构建一个 compose 函数,它接受任意多个函数作为参数(这些函数都只接受一个参数),然后 compose 返回的也是一个函数,达到以下的效果:
8.const operate = compose(div2, mul3, add1, add1)
9.operate(0) //=>相当于div2(mul3(add1(add1(0))))
10.operate(2) //=>相当于div2(mul3(add1(add1(2))))
11.
12.简而言之:compose 可以把类似于 f(g(h(x))) 这种写法简化成 compose(f, g, h)(x)。请你完成 compose 函数的编写。
13.额外挑战:你能通过 1~2 行代码实现 compose 吗。
~~~
42. 点击每一个li可以创建出对应的对象(可以不兼容低版本浏览器)
~~~javascript
1.[结构]
2.<ul>
3. <li><a href='http://xxx'>xxx</a></li>
4. <li><a href='http://sss'>sss</a></li>
5.</ul>
6.
7.点击第一个LI创建对象:
8.{
9. index:1,
10. name:'xxx',
11. link:'http://xxx'
12.}
13.同样点击第二个LI创建对象
14.{
15. index:2,
16. name:'sss,
17. link:'http://sss'
18.}
19....
~~~
43. 分析此函数的作用,补全1/2处的代码
![](https://img.kancloud.cn/87/07/8707faa7d427e25fe9c985bb9f083f40_616x551.png)
44. 获取数据中的最大值
45. 编写一个函数,把一个列表中的每一项反序
~~~
1.<ul id='target'>
2. <li>1</li>
3. <li>2</li>
4. <li>3</li>
5. <li>4</li>
6. <li>5</li>
7.</ul>
~~~
46. 编写一个函数实现数组扁平化
~~~javascript
1.let ary = [1,[2,[3,[4,5]]],6]; //=>[1,2,3,4,5,6]
~~~
47. 网页中实现一个计算,计算当年还剩多少时间的倒数计时程序,要求网页上显示 “xxxx年还剩xx天xx时xx分xx秒”;(获取当前时间采用new Data()即可)
48. offsetHeight/clientHeight/scrollHeight的区别
49. 获取字符串中出现次数最多的字符及出现的次数
50. 完成如图所示的文字横向无缝衔接滚动的“跑马灯”效果
- 1.变量提升、闭包、THIS、OOP
- 0002.NODE安装及一些基础概念
- 0003.常用的DOS命令
- 0004.基于npm包管理器下载所需资源
- 0005.简单操作一遍gitHub
- 0006.集中式vs分布式版本控制系统
- 0007.简述git安装
- 0008.基于git创建一个空仓库
- git-svn区别
- 0009.git的工作流程
- 0010.完成本地git仓库个远程gitHub仓库的信息同步
- 0011.JS数据渲染机制及堆栈内存
- 0012.变量提升机制
- 0013.带VAR和不带的区别
- 0014.作用域链的一些扩展
- 0015.变量提升的一些细节问题(关于条件判断下的处理)
- 0016.条件判断下的变量提升到底有多坑
- 0017.变量提升机制下重名的处理
- 0018.ES6中的LET不存在变量提升
- 0019.JS中的暂时性死区问题
- 0020.区分私有变量和全局变量
- 0021.有关私有变量和作用域链的练习题
- 0022.上级作用域的查找
- 0023.闭包及堆栈内存释放
- 0024.闭包作用之保护
- 0026.单例设计模式的理论模型
- 0027.强化高级单例模式理论模型
- 0028.实战项目中的模块化
- 0029.没有什么实际意义的工厂模式
- 0030.JS是基于面向对象开发设计的语言
- 0031.创建值的两种方式以及区别
- 0032.构造函数执行的机制
- 0033.构造函数中的一些细节问题
- 0034.原型链和原型链的查找机制
- 0045.练习题讲解[19]-关于原型重定向问题综合练习
- 0035.练习题讲解[01-05]
- 0036.练习题讲解[06~08]-JS中的严格模式和ARG的映射机制
- 0037.课件3&练习题讲解[09]-逻辑或和逻辑与
- 0038.课件4&练习题讲解[10]-有关堆栈内存释放
- 0039.课件5&练习题讲解[11~13]
- 0040.课件6&练习题讲解[14]-堆栈内存和this混合应用题
- 0041.课件7&练习题讲解[15]-构造函数和原型链的运行机制
- 0042.课件8&练习题讲解[16]-基于闭包解决循环绑定
- 0043.课件9&练习题讲解[17]-有关this的两道面试题
- 0044.课件10&练习题讲解[18]-关于原型重定向问题
- 0045.课件11&练习题讲解[19]-关于原型重定向问题综合练习
- 0046.课件12&练习题讲解[20]-数组去重引发的基于内置类原型扩展方法,并且实现链式调用
- 0047.课件13&练习题讲解[其余随性题]-闭包和团队协作开发
- 0049.课件1&LESS学习-如何编译less
- 0050.课件2&LESS学习-less中最常用的一些基础语法
- 总结
- 数组常用方法
- 2.原型深入、THIS、商城排序、正则
- 0051.原型深入1-函数的三种角色
- 0052.原型深入2-基于阿里的面试题理解函数的三种角色
- 0053.原型深入3-原型链机制最终版(Function)
- 0054.原型深入4-深入理解原型和CALL
- 0055.原型深入5-call、apply、bind三者的区别
- 0056.原型深入6-基于APPLY获取数组中的最大值
- 0057.数组和对象的解构赋值
- 0058.剩余和展开运算符
- 0059.把类数组转换为数组
- 0060.原型深入8-基于ES6的方式把类数组转换为数组
- 0061.ES6-箭头函数
- 0062.课件1&商城排序1-基于AJAX获取数据(不讲AJAX)
- 0063.课件2&商城排序2-把获取的JSON字符串转换为对象
- 0064.课件3&商城排序3-基于ES6模板字符串完成数据绑定
- 0065.课件4&商城排序4-按照价格升序排序
- 0066.课件5&商城排序5-简述DOM映射机制
- 0067.课件6&商城排序6-按照价格升降序切换
- 0068.课件7&商城排序7-实现多列升降序切换
- 0069.课件8&商城排序8-解决多列切换中的一点BUG
- 0070.课件9&商城排序9-如何学习和练习项目案例
- 0071.课件10&复习商城排序1-基于LESS实现样式
- 0072.课件11&复习商城排序2-高级单例模式框架结构
- 0073.课件12&复习商城排序3-数据获取和绑定
- 0074.课件13&复习商城排序4-学习DOM映射和告别DOM映射
- 0075.课件14&复习商城排序5-完成事件绑定的逻辑
- 0076.课件15&复习商城排序6-由数据绑定引发的DOM性能优化
- 0077.课件1&正则基础概念和常用的元字符梳理
- 0078.课件2&中括号的一点特殊细节
- 0079.课件3&分组的三个作用
- 0080.课件4&常用的正则表达式
- 0081.课件5&正则捕获的懒惰性和解决方案
- 0082.课件6&正则捕获的贪婪性和分组捕获
- 0083.课件7&更多的捕获方式(REPLACE)
- 0084.课件8&处理时间字符串格式化
- 3.Dom盒子模型、JQ
- 0086.课件1&考试题讲解-第一次考试题[01~03]
- 0087.课件2&考试题讲解-第一次考试题[04]
- 0088.课件3&考试题讲解-第一次考试题[05]
- 0089.课件4&考试题讲解-第一次考试题[06~08]
- 0090.课件5&考试题讲解-第二次考试题[01~05]
- 延时打印-无视频
- 0091.课件1&DOM盒子模型1-复习常用的DOM操作属性和方法
- 0092.课件2&DOM盒子模型2-JS盒子模型属性第一部分
- 0093.课件3&DOM盒子模型3-获取元素的具体样式
- 4. 前三周综合复习
- 0112.课件1&ES6新语法和DOM回流
- 0113.课件2&关于面向对象的理解
- 0114.课件3&关于THIS汇总
- 0115.课件4&作用域链和原型链
- 0116.课件5&数组去重
- 0117.课件6&递归算法和数组扁平化
- 0119.课件8&ES6中的类及继承
- 0120.课件9&正则的一点应用
- 0121.课件10&关于对闭包的理解
- 0122.课件11&闭包、THIS、面向对象综合练习题
- 0123.课件12&复杂一些的正则
- 0124.课件13&拿正则搞各种需求
- 0125.课件14&一些杂七杂八的题
- 0126.课件15&图片延迟加载
- 0127.课件16&柯理化函数编程思想
- 5.定时器、异步、动画库、轮播
- 0129.课件1&定时器基础知识
- 0130.课件2&JS中的同步异步编程核心原理
- 0131.课件3&初识Promise
- 0135.课件7&回调函数原理和实战
- NODE和PROMISE-34
- 024-[PROMISR A+]-复习PROMISR的使用
- 022-重点***[专题汇总]-JS中的同步异步(宏任务和微任务)
- 6.事件、事件委托、发布订阅
- 1.事件和事件委托
- 149.课件1&事件的理论基础
- 150.课件2&事件对象中常用的属性
- 151.课件3&事件对象的兼容问题
- 152.课件4&默认行为及阻止
- 153.课件5&事件传播机制(很重要)
- 158.课件10&事件委托
- 161.课件13&基于事件委托实现无限级折叠菜单
- 169.课件8&[拖拽]扩展柯理化函数编程思想
- 2.DOM事件绑定、发布订阅
- 162.课件1&DOM0和DOM2的运行机制(事件池机制)
- 163.课件2&DOM2事件绑定的兼容问题
- 7.移动端开发
- 8.AJAX
- 226.课件14&14-基于PROMISE解决回调地狱问题
- 9.AXIOS视频
- node和promise
- 22-[专题汇总]-JS中的同步异步(宏任务和微任务)
- REACT