一些我在学习过程中觉的不错的地方,可以用来当做面试的考点或者自我提高的知识点。
js
写个阶乘函数,如:5的阶乘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 答案: 1、尾调用(一般解决方法): function factorial(n) { if(n === 1) return 1; return n * factorial(n-1µ); } 尾调用会形成一堆‘调用帧’的‘调用栈’,递归非常耗费内存,容易出现栈溢出(stack overflow) 2、尾递归(优化解决方法) function factorial(n,total = 1) { if(n === 1){ return total } return factorial(n-1,n * total); } factorial(5); ps: 尾递归的好处:避免出现栈溢出错误 附加知识点: 科里化:多参数函数抓换成单参数 3、计算 var a = [function(x) { return x * *;}, 20]; 计算 a[0](a[1]) 的值; 答案是 400;
|
判断一个对象是否是数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1、ES 5中 Array.isArray(对象) 2、自己写isArray var isArray = Function.isArray || function(o) { return typeof o === 'object' && Object.prototype.tostring.call(o) === '[object Array]' } 3、instanceof操作符 检测对象的原型链是否指向构造函数的prototype对象的 var arr = [1,2,3,1]; alert(arr instanceof Array); // true 4、对象的constructor属性 除了instanceof,每个对象还有constructor的属性,利用它似乎也能进行Array的判断。 var arr = [1,2,3,1]; alert(arr.constructor === Array); // true
|
如何根js据脚本检查某个样式浏览器是否支持,如 textShadow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 核心思路 var root = document.documentElement; if ('textShadow' in root.style) { root.classList.add('textShadow'); } else { root.classList.add('no-textShadow'); } 检查方法 function testProp(property) { var root = document.documentElement; if(property in root.style) { root.classList.add(property.toLowerCase()); return true; } root.classList.add('no-' + property.toLowerCase()); return false; } * 能解析某个css特性,不代表它已经实现(或正确实现)了这个特性! 把样式放进元素中 function testValue(id, value, property) { var testElement = root.createElement('p'); testElement.style[property] = value; if(testElement.style[property]) { root.classList.add(id); return true; } root.classList.add('no-' + id); return false; }
|
函数名 和 变量重名会怎样,为什么
如果变量名 和函数拥有相同的名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var a = 100; function a (){ console.log('function a'); } a(); // TypeError: a is not a function 这是为什么呢: 因为在js解析的过程中, 1、变量的申明和函数的申明会提升到顶部 2、函数的申明在最前面,接着是变量 3、申明和赋值是拆分开的 4、变量的赋值会覆盖函数的声明 js解析过程如下: var a = function (){ console.log('function a') } var a = 100; a();
|
####
1 2 3 4 5 6 7
| var string = "我的账户余额:2,235,467.20"; // 请用js计算出我到底有多少钱(输出Number类型数字,代码尽量简洁,考虑通用情况) ------------- // 使用正则表达式出金额数字,然后再将金额数字中的‘,’,替换掉 /^(([1-9]\d*)|0)(\.\d{1,2})?$/
|
原型链
闭包
css
多重边框的实现
1 2 3 4 5 6
| 1、使用多重元素模拟边框(差) 2、使用css box-shadow (优) box-shadow: 0 0 0 10px #655, 0 0 0 15px deeppink, 0 2px 5px 15px rgba(0,0,0,.6);
|
开放性问题
混合应用的优势
初 中 高级工程师怎么区分 理解。
有一个新的工程 新的项目,你要怎么建立相关架构
某公司前端面试试题
函数式编程理解
(Keep Learning Keep Writing……)