常用的JavaScript设计模式
-
单体模式
-
工厂模式
-
例模式
函数
-
函数的定义
-
局部变量和全局变量
-
返回值
-
匿名函数
-
自运行函数
-
闭包
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
var foo = “abc\123”; // foo的值为"abc\123"
console.log(re.test(foo)); //true
console.log(reg.test(foo)); //true
如上面的代码中可以看到,使用正则表达式字面量表示法时式子显得更加简短,而且不用按照类似类(class-like)的构造函数方式思考。
其次,在当使用构造函数的时候,在这里要使用四个反斜杠才能匹配单个反斜杠。这使得正则表达式模式显得更长,更加难以阅读和修改。正确来说,当使用 RegExp()构造函数的时候,不仅需要转义引号(即"表示"),并且通常还需要双反斜杠(即\表示一个\)。
使用 new RegExp()的原因之一在于,某些场景中无法事先确定模式,而只能在运行时以字符串方式创建。
👓参考
✨83. js 中 callee 与 caller 的作用
参考答案:
1. caller 返回一个调用当前函数的引用 如果是由顶层调用的话 则返回 null
(举个栗子哈 caller 给你打电话的人 谁给你打电话了 谁调用了你 很显然是下面 a 函数的执行 只有在打电话的时候你才能知道打电话的人是谁 所以对于函数来说 只有 caller 在函数执行的时候才存在)
var callerTest = function() {
console.log(callerTest.caller);
};
function a() {
callerTest();
}
a(); //输出function a() {callerTest();}
callerTest(); //输出null
2. callee 返回一个正在被执行函数的引用 (这里常用来递归匿名函数本身 但是在严格模式下不可行)
callee 是 arguments 对象的一个成员 表示对函数对象本身的引用 它有个 length 属性(代表形参的长度)
var c = function(x, y) {
console.log(arguments.length, arguments.callee.length, arguments.callee);
};
c(1, 2, 3); //输出3 2 function(x,y) {console.log(arguments.length,arguments.callee.length,arguments.callee)}
✨84. 异步加载 js 的方法
参考答案:
方案一: <script>
标签的 async="async"
属性(详细参见:script 标签的 async 属性)
点评:HTML5 中新增的属性,Chrome、FF、IE9&IE9+均支持(IE6~8 不支持)。此外,这种方法不能保证脚本按顺序执行。
方案二: <script>
标签的 defer="defer"
属性
点评:兼容所有浏览器。此外,这种方法可以确保所有设置 defer
属性的脚本按顺序执行。
方案三:动态创建 <script>
标签
示例:

点评:兼容所有浏览器。
方案四:AJAX eval(使用 AJAX 得到脚本内容,然后通过 eval_r(xmlhttp. responseText)来运行脚本)
点评:兼容所有浏览器。
方案五:iframe 方式(这里可以参照:iframe 异步加载技术及性能 中关于 Meboo 的部分)
点评:兼容所有浏览器。
✨85. 去除数组重复成员的方法
参考答案:
方法 1 扩展运算符和 Set 结构相结合,就可以去除数组的重复成员
// 去除数组的重复成员
[…new Set([1, 2, 2, 3, 4, 5, 5])];
// [1, 2, 3, 4, 5]
方法 2
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]); // [1, 2, 3]
方法 3(ES5)
function unique(arry) {
const temp = [];
arry.forEach(e => {
if (temp.indexOf(e) == -1) {
temp.push(e);
}
});
return temp;
}
✨86. 去除字符串里面的重复字符
参考答案:
最简单的方式
[…new Set(“ababbc”)].join(“”); // “abc”
✨87. 求数组的最大值
前端资料汇总
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿。