js做面试赛码网编程题输入输出时输入输出怎么办

1、字符串转驼峰
例如:border-bottom-color ----& borderBottomColor
var str="border-bottom-color";
function Change(str){
var arr=str.split("-");
for(var i=1;i&arr.i++){
arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
str=arr.join("");
console.log(Change(str));//borderBottomColor
2、查找字符串中出现次数最多的字符和次数
例如:sdddrtkjsfkasjdddj中出现最多的字符是d,出现了6次
var str="sdddrtkjsfkkkasjdddj";
var max=0;
function Search(str){
var json={};
for(var i=0;i&str.i++){
if(!json[str[i]]){
json[str[i]]=str[i];
json[str[i]]+=str[i];
for(var i=0;i&str.i++){
if(json[str[i]].length&max){
max=json[str[i]].
char=str[i];
console.log("出现次数最多的字符是"+char+",出现了"+max+"次")
Search(str);
阅读(...) 评论()摘要:今天分享的面试题涉及到作用域、内置方法、声明、this使用、闭包、数据类型、事件循环、算法等.最好收藏一下,别到时候后悔莫...
问题1:作用域
考虑如下代码:
(function() {
var a = b = 5;
console.log(b);
请问控制台上会输出什么?
这一题的陷阱是,在函数表达式中有两个赋值,但a是用关键字var 来声明的,这意味着a是局部变量,而b则被赋予为全局变量。
另一个陷阱是,它并没有使用严格模式(use strict)。在函数里面,如果启用了严格模式,代码就会报错:&Uncaught ReferenceError: b is not defined&。请记住,严格模式需要你显式地引用全局作用域,代码应该写成:
(function() {
'use strict';
var a = window.b = 5;
console.log(b);
问题2:创建&内置&方法
给String对象定义一个repeatify方法。该方法接收一个整数参数,作为字符串重复的次数,最后返回重复指定次数的字符串。例如:
console.log('hello'.repeatify(3));
输出应该是:hellohellohello.
一个可行的做法如下:
String..repeatify = String.prototype.repeatify || function(times) {
var str = '';
for (var i = 0; i & i++) {
这题测试开发者对的继承及原型属性的知识,它同时也检验了开发者是否能扩展内置数据类型的方法。
这里的另一个关键点是,看你怎样避免重写可能已经定义了的方法。这可以通过在定义自己的方法之前,检测方法是否已经存在。
String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};
当你被问起去扩展一个Javascript方法时,这个技术非常有用。
问题3 :声明提前
下面这段代码的结果是什么?为什么?
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
代码的运行结果:undefined和 2
理由是,变量和函数的声明都被提前至函数体的顶部,而同时变量并没有被赋值。因此,当打印变量a时,它虽存在于函数体(因为a已经被声明),但仍然是undefined。换句话说,上面的代码等同于下面的代码:
function test() {
function foo() {
console.log(a);&
console.log(foo());
问题4:JavaScript中的this
下面代码的运行结果是什么并做解释。
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.
console.log(obj.prop.getFullname());
var test = obj.prop.getF
console.log(test());
代码输出:Aurelio De Rosa 和 John Doe
理由是,Javascript中关键字this所指代的函数上下文,取决于函数是怎样被调用的,而不是怎样被定义的。
在第一个console.log(),getFullname()被作为obj.prop对象被调用。因此,当前的上下文指代后者,函数返回这个对象的fullname属性。相反,当getFullname()被赋予test变量,当前的上下文指代全局对象window,这是因为test被隐式地作为全局对象的属性。基于这一点,函数返回window的fullname,在本例中即为代码的第一行。
问题5:call()和apply()
修复前一个问题,让最后一个console.log() 打印输出Aurelio De Rosa.
这个问题可以通过运用call()或者apply()方法强制转换上下文环境。如果你不了解这两个方法及它们的区别,我建议你看看这篇文章What&s the difference between function.call and function.apply?. 下面的代码中我用了call(),但apply()也能产生同样的结果:
console.log(test.call(obj.prop));
问题6:闭包
考虑下面的代码:
var nodes = document.getElementsByTagName('button');
for (var i = 0; i & nodes. i++) {
& &nodes[i].addEventListener('click', function() {
& & & console.log('You clicked element #' + i);
请问,如果用户点击第一个和第四个按钮,控制台上会输出什么?为什么?
上面代码的目的在于检测JavaScript的一个重要概念:闭包。对于每一个JavaScript开发者来说,如果你想在网页中编写5行以上的代码,那么准确理解和恰当使用闭包是非常重要的。如果你想开始学习或者只是想简单地温习一下闭包,那么我强烈建议你去阅读这个教程:Colin Ihrig 写的JavaScript Closures Demystified 。
好了,回到上面的代码。控制台会输出两次You clicked element #NODES_LENGTH,其中#NODES_LENGTH等于nodes内的元素个数。当for循环结束时,变量i的值等于nodes的长度。另外,由于i是在事件被添加时的函数作用域,因此变量i属于事件的闭包。由于闭包中变量的值不是静态的,因而i的值并不是事件被添加时所赋予的值(比如添加第一个按钮时i为0,第二个按钮时i为1)。当事件被执行时,控制台会输出变量i当前的值,即i等于nodes的长度。
问题7:闭包
修复上题的问题,使得点击第一个按钮时输出0,点击第二个按钮时输出1。
有多种办法解决这个问题,下面我给出其中的两种。
第一个解决方案要用到一个IIFE来创建另外一个闭包,从而得到所希望的i的值。相应的代码如下:
var nodes = document.getElementsByTagName('button');
for (var i = 0; i & nodes. i++) {
& &nodes[i].addEventListener('click', (function(i) {
& & & return function() {
& & & & &console.log('You clicked element #' + i);
& &})(i));
另一个解决方案不使用IIFE,而是将函数移到循环的外面,代码如下:
function handlerWrapper(i) {
& &return function() {
& & & console.log('You clicked element #' + i);
var nodes = document.getElementsByTagName('button');
for (var i = 0; i &nodes. i++) {
& &nodes[i].addEventListener('click', handlerWrapper(i));
问题8:数据类型
考虑如下代码:
console.log(typeof null);
console.log(typeof {});
console.log(typeof []);
console.log(typeof undefined);
这一个问题看起来似乎有点傻,但是它测试了typeof 操作符的知识。很多JavaScript开发者并没有意识到typeof的独特性。在本例中,控制台会输出下面的内容:
最让人吃惊的输出结果可能是第三个,许多开发者认为typeof [ ] 会返回Array。如果你想测试变量是否为数组,可以写下面的代码:
var myArray = [];
if (myArray instanceof Array) {
& &console.log(&myArray is an instance of Array.&);
& &console.log(&myArray is not an instance of Array.&);
问题9:事件循环
下面代码运行结果是什么?请解释。
function printing() {
& &console.log(1);
& &setTimeout(function() { console.log(2); }, 1000);
& &setTimeout(function() { console.log(3); }, 0);
& &console.log(4);
printing();
输出结果:
要弄懂数字为何以这种顺序输出,你需要弄明白setTimeout()是干什么的,以及浏览器的事件循环工作原理。浏览器有一个事件循环用于检查事件队列,处理延迟的事件。UI事件(例如,点击,滚动等),Ajax回调,以及提供给setTimeout()和setInterval()的回调都会依次被事件循环处理。因此,当调用setTimeout()函数时,即使延迟的时间被设置为0,提供的回调也会被排队。回调会呆在队列中,直到指定的时间用完后,引擎开始执行动作(如果它在当前不执行其他的动作)。因此,即使setTimeout()回调被延迟0毫秒,它仍然会被排队,并且直到函数中其他非延迟的语句被执行完了之后,才会执行。
有了这些认识,理解输出结果为&1&就容易了,因为它是函数的第一句并且没有使用setTimeout()函数来延迟。接着输出&4&,因为它是没有被延迟的数字,也没有进行排队。然后,剩下了&2&,&3&,两者都被排队,但是前者需要等待一秒,后者等待0秒(这意味着引擎完成前两个输出之后马上进行)。这就解释了为什么&3&在&2&之前。
问题10:算法
写一个判断质数的isPrime()函数,当其为质数时返回true,否则返回false。
我认为这是在面试中最常问到的一个问题。尽管这个问题反复出现并且也很简单,但是从候选人提供的答案中能很好地看出候选人的数学和算法能力水平。
首先, 因为JavaScript不同于C或者Java,因此你不能信任传递来的数据类型。如果面试官没有明确地告诉你,你应该询问他是否需要做输入检查,还是不进行检查直接写函数。严格上说,应该对函数的输入进行检查。
需要记住的第二点,负数不是质数。同样的,1和0都不是,因此,要对这些数字做检测。另外,2是唯一的既是偶数又是质数的数字。没有必要用一个循环来验证4,6,8。再者,如果一个数字不能被2整除,它同样也不能被4,6,8等整除,因此你的循环需要跳过这些数字。可以采取其他一些更明智的优化手段,我这里采用的是适用于大多数情况的。例如,如果一个数字不能被5整除,它也不会被5的倍数整除。所以,没有必要检测10,15,20等等。如果你深入了解这个问题的解决方案,我建议你去看相关的Wikipedia介绍。
最后一点,你不需要检查比输入数字的开方还要大的数字。我感觉人们会遗漏掉这一点,并且也不会因为此而获得消极的反馈。但是,展示出这一方面的知识会给你额外加分。
现在你具备了这个问题的背景知识,下面是总结以上所有考虑的解决方案:
function isPrime(number) {
& &// If your browser doesn't support the method Number.isInteger of ECMAScript 6,
& &// you can implement your own pretty easily
& &if (typeof number !== 'number' || !Number.isInteger(number)) {
& & & // Alternatively you can throw an error.
& &if (number & 2) {
& &if (number === 2) {
& &} else if (number % 2 === 0) {
& &var squareRoot = Math.sqrt(number);
& &for(var i = 3; i &= squareR i += 2) {
& & & if (number % i === 0) {
问题11:(设计题)
想实现一个对页面某个节点的拖曳?如何做?(使用原生JS)
回答出概念即可,下面是几个要点
给需要的节点绑定mousedown, mousemove, mouseup事件
mousedown事件触发后,开始拖拽
mousemove时,需要通过event.clientX和clientY获取拖拽位置,并实时更新位置
mouseup时,拖拽结束
需要注意浏览器边界的情况
本文我们讨论了在对Javascript开发者面试中常问起的典型问题。实际中的问题会因面试的不同而不同,但是所涉及的概念和主题通常很类似。我希望你在检测自己的知识中获得乐趣。如果你不知道其中一些问题的答案,不要担心:没有什么是学习和试错不能够弥补的。如果你曾在面试中被问过其他的一些有趣的问题,不要犹豫,跟我们分享吧,它会帮助很多的开发者。
上一篇:下一篇:
如果我们没有JS可用,图像就会被简单地显示出来,而没有很少的片段效果.现在我们来编写效果功能.JavaScript对于这种效果的功...
技巧之:使用技巧1、打包."打包"功能用于压缩演示文稿(包... 其它图像浏览软件.js ...记事本;DreamWeaver.lrc...记事本.m3u......
那么我们今天就要来分享下Javascript所有常用实用技巧!1. 将彻... 2. 取消选取、防止复制 3.JS不允许粘贴4. JS防止复制 [5. IE 地址...
IT技术大神
大纲:企业布局技巧,如何高效的编写CSS样式,常用选择器,基本标签,动态布局,盒子模型,jquery类库调用,JS特效编写,JS编...
学习web前端
目前更多胜任前端服务部分,一般资深jser比较容易上手,但数量稀缺;5、JS的怪异语法,让很多人望而却步,有些公司面试jser居然考怪异语法,我想问这有什么卵用?达成一个目标有很多种方法,我一般用最容易看懂的,没有必要耍技巧,编码特别是做页面交互开发,...
运行一下看看有哪些改变,我就能写出一样的效果来.能做到这一步,需要javascript、css和dhtml的扎实基础,所以技巧是有的,但没有捷径.现在学js的人,不从底层一点点写起,一上来就研究jquery或第三方架构,那我只能说,一辈子他们就只能痛苦地一行行研究别人的代...
javascript(题主你写错单词了)不是简单的网页特效,是来写网页脚本的,网页(html)不是只要... 还没学会基础语法就谈深入技巧,我觉得这个学习顺序不可取啊.框架也是由js写出来的,相当与你...
建议题主可以先再学点东西再找前端工作 只会html和css js还不是很熟的话基本上没法胜任前端工... 去公司能学到的东西基本上都是将基础知识运用于实践的经验和一些技能技巧如果基础知识掌握得...
_javascript技巧3.不再用的req.flsah():express 版本更新后遇到的问题 flash()4.app.locals和res.locals 图灵社区 : 阅读 : express配置项more5.crypto加密解密:node.js加密算法库crypto6.在 css 中如何...
宝盖头和繁弱
今日推荐本周推荐本月推荐
54 分钟前标签:
54 分钟前标签:
54 分钟前标签:
9 小时前标签:
9 小时前标签:
crontab是linux下常用的的,用来设置周期性执行命令的工具.利用这个工具,可以帮助我们制定计划任务,对于系统管理员来说,...
学习AngularJS的一个好方法是逐步完成本教程,它将引导您构建一个完整的AngularJS web应用程序. 该web应用是一个Android设备...
web前端开发
过程式,面向对象,函数式,逻辑式.随着软件工业化程度的普及,以及软件的复杂度越来越高,编程语言的发展历程也是从最初的过...
四川生活吧对于面试时,需要做笔试题和上机题的一点感受 - 珍爱生命,远离编程 - ITeye博客
博客分类:
关于来公司应聘的人员,公司要求必须要进行出题考核(笔试和上机试题),检验应聘者的技术水平。对此,我有一些自己的看法。
1.工作3年以下的,我们已经出了3套试题,分别针对“新人”、“初级工程师”、“中级工程师“进行考核。这个阶段的应聘人员,基本上通过笔试和面试交流,就可以比较清楚的了解应聘人员的水平;
2.工作3年以上的,通过试题的考核,效果不明显,意义不大。
首先,3年以上工作经验的人,基本上都不会做题(对做题有种抵触情绪)。他们认为一份试题无法考核一个人的综合实力。他们希望在实际工作中体现自己的价值。
其次,每个公司使用的技术不同,所在行业不同,接触的业务不同,通过上机题,无法真实地考查一个人的能力。如果出一份业务系统模块的题目,很显然,大家都能完成,无非就是代码规范的考查;如果出一份算法题,网上答案满天飞,也不知道是否是自己写的代码。假设,上机题都做了,并且实现了结果,难道就真的能判定这个人的能力很高吗?很可能我们的考试题恰巧是应聘人员接触过的或者是做过的,分数会很高。这样,就会造成一种假象:此人水平不错;很可能应聘人员的其他方面很强,这是考核的这份上机题恰恰是他在技术上的薄弱环节,分数很低。这样,就会造成另一种假象:此人水平不行。2种结果,都是悲剧的:(1)招了一个高分、高薪低能的人,没有办法承担公司赋予的工作和岗位职责(但是此人确实通过了公司的笔试、面试和上机题的考核,而且分数很不错);(2)失去了一个人才(仅仅上机考核的分数不理想)。
中国的教育证明:应试教育是失败的,是不可能培养出天才的,甚至人才都很难培养出来。应试教育就像一条生产饼干的流水线,进入模板前,大家都有自己的特点,经过模板的加工后,出来的都是一模一样的。
如果大家对足球感兴趣的话,下面的例子就很能说明问题。原AC米兰的中场核心——卡卡,获得过金球奖和国际足球先生,他的能力是得到全世界专家、俱乐部、球员、球迷认可的。但是,当他转会(6500万欧元)到另一个世界著名俱乐部——皇家马德里后,迟迟打不上主力,现在面临被清洗的境遇(2500万欧元)。转会前后缩水了4000万欧元。
这个例子证明了,一个人除了有能力外,还需要看是否适应环境,是否符合团队的需求。
试用期其实就是双方(公司和应聘者)相互检验是否符合要求、相互磨合的过渡期。如果非要刻意缩短这个时间,反而不符合事物发展的规律,极易造成错误的判断。“路遥知马力,日久见人心”说的就是这个道理。
浏览: 94634 次
来自: 济南
你好 请问一下 能画大卫三角形么
感觉不太好画,坐标点不好找 ...
还缺了一个步骤,需要在spring.xml里面配置一个bean ...
moment52 写道ServletContextAware是 ...
ServletContextAware是spring的还是st ...
请问这么为这个raphael_4.text这个字上面设置事件? ...80%应聘者都不及格的JS面试题
作者:王仕军
字体:[ ] 类型:转载 时间:
超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到。这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示?
共 5024 字,读完需 6 分钟,速读需 2 分钟,本文首发于知乎专栏前端周刊。写在前面,笔者在做面试官这 2 年多的时间内,面试了数百个前端工程师,惊讶的发现,超过 80% 的候选人对下面这道题的回答情况连及格都达不到。这究竟是怎样神奇的一道面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示?且听我慢慢道来
不起眼的开始
招聘前端工程师,尤其是中高级前端工程师,扎实的 JS 基础绝对是必要条件,基础不扎实的工程师在面对前端开发中的各种问题时大概率会束手无策。在考察候选人 JS 基础的时候,我经常会提供下面这段代码,然后让候选人分析它实际运行的结果:
for (var i = 0; i & 5; i++) {
setTimeout(function() {
console.log(new Date, i);
console.log(new Date, i);
这段代码很短,只有 7 行,我想,能读到这里的同学应该不需要我逐行解释这段代码在做什么吧。候选人面对这段代码时给出的结果也不尽相同,以下是典型的答案:
A. 20% 的人会快速扫描代码,然后给出结果:0,1,2,3,4,5;
B. 30% 的人会拿着代码逐行看,然后给出结果:5,0,1,2,3,4;
C. 50% 的人会拿着代码仔细琢磨,然后给出结果:5,5,5,5,5,5;
只要你对 JS 中同步和异步代码的区别、变量作用域、闭包等概念有正确的理解,就知道正确答案是 C,代码的实际输出是:
T00:43:45.873Z 5
T00:43:46.866Z 5
T00:43:46.868Z 5
T00:43:46.868Z 5
T00:43:46.868Z 5
T00:43:46.868Z 5
接下来我会追问:如果我们约定,用箭头表示其前后的两次输出之间有 1 秒的时间间隔,而逗号表示其前后的两次输出之间的时间间隔可以忽略,代码实际运行的结果该如何描述?会有下面两种答案:
A. 60% 的人会描述为:5 -& 5 -& 5 -& 5 -& 5,即每个 5 之间都有 1 秒的时间间隔;
B. 40% 的人会描述为:5 -& 5,5,5,5,5,即第 1 个 5 直接输出,1 秒之后,输出 5 个 5;
这就要求候选人对 JS 中的非常熟悉,循环执行过程中,几乎同时设置了 5 个定时器,一般情况下,这些定时器都会在 1 秒之后触发,而循环完的输出是立即执行的,显而易见,正确的描述是 B。
如果到这里算是及格的话,100 个人参加面试只有 20 人能及格,读到这里的同学可以仔细思考,你及格了么?
追问 1:闭包
如果这道题仅仅是考察候选人对 JS 异步代码、变量作用域的理解,局限性未免太大,接下来我会追问,如果期望代码的输出变成:5 -& 0,1,2,3,4,该怎么改造代码?熟悉闭包的同学很快能给出下面的解决办法:
for (var i = 0; i & 5; i++) {
(function(j) { // j = i
setTimeout(function() {
console.log(new Date, j);
console.log(new Date, i);
巧妙的利用 IIFE(Immediately Invoked Function Expression:声明即执行的函数表达式)来解决闭包造成的问题,确实是不错的思路,但是初学者可能并不觉得这样的代码很好懂,至少笔者初入门的时候这里琢磨了一会儿才真正理解。
有没有更符合直觉的做法?答案是有,我们只需要对循环体稍做手脚,让负责输出的那段代码能拿到每次循环的 i 值即可。该怎么做呢?利用 JS 中基本类型(Primitive Type)的参数传递是按值传递(Pass by Value)的特征,不难改造出下面的代码:
var output = function (i) {
setTimeout(function() {
console.log(new Date, i);
for (var i = 0; i & 5; i++) {
output(i); // 这里传过去的 i 值被复制了
console.log(new Date, i);
能给出上述 2 种解决方案的候选人可以认为对 JS 基础的理解和运用是不错的,可以各加 10 分。当然实际面试中还有候选人给出如下的代码:
for (let i = 0; i & 5; i++) {
setTimeout(function() {
console.log(new Date, i);
console.log(new Date, i);
细心的同学会发现,这里只有个非常细微的变动,即使用 ES6 (Block Scope)中的 let 替代了 var,但是代码在实际运行时会报错,因为最后那个输出使用的 i 在其所在的作用域中并不存在,i 只存在于循环内部。
能想到 ES6 特性的同学虽然没有答对,但是展示了自己对 ES6 的了解,可以加 5 分,继续进行下面的追问。
追问 2:ES6
有经验的前端同学读到这里可能有些不耐烦了,扯了这么多,都是他知道的内容,先别着急,挑战的难度会继续增加。
接着上文继续追问:如果期望代码的输出变成 0 -& 1 -& 2 -& 3 -& 4 -& 5,并且要求原有的代码块中的循环和两处 console.log 不变,该怎么改造代码?新的需求可以精确的描述为:代码执行时,立即输出 0,之后每隔 1 秒依次输出 1,2,3,4,循环结束后在大概第 5 秒的时候输出 5(这里使用大概,是为了避免钻牛角尖的同学陷进去,因为 JS 中的定时器触发时机有可能是不确定的,具体可参见 )。
看到这里,部分同学会给出下面的可行解:
for (var i = 0; i & 5; i++) {
(function(j) {
setTimeout(function() {
console.log(new Date, j);
}, 1000 * j)); // 这里修改 0~4 的定时器时间
setTimeout(function() { // 这里增加定时器,超时设置为 5 秒
console.log(new Date, i);
}, 1000 * i);
不得不承认,这种做法虽粗暴有效,但是不算是能额外加分的方案。如果把这次的需求抽象为:在系列异步操作完成(每次循环都产生了 1 个异步操作)之后,再做其他的事情,代码该怎么组织?聪明的你是不是想起了什么?对,就是 。
可能有的同学会问,不就是在控制台输出几个数字么?至于这样杀鸡用牛刀?你要知道,面试官真正想考察的是候选人是否具备某种能力和素质,因为在现代的前端开发中,处理异步的代码随处可见,熟悉和掌握异步操作的流程控制是成为合格开发者的基本功。
顺着下来,不难给出基于 Promise 的解决方案(既然 Promise 是 ES6 中的新特性,我们的新代码使用 ES6 编写是不是会更好?如果你这么写了,大概率会让面试官心生好感):
const tasks = [];
for (var i = 0; i & 5; i++) { // 这里 i 的声明不能改成 let,如果要改该怎么做?
tasks.push(new Promise((resolve) =& {
setTimeout(() =& {
console.log(new Date, j);
resolve(); // 这里一定要 resolve,否则代码不会按预期 work
}, 1000 * j); // 定时器的超时时间逐步增加
Promise.all(tasks).then(() =& {
setTimeout(() =& {
console.log(new Date, i);
}, 1000); // 注意这里只需要把超时设置为 1 秒
相比而言,笔者更倾向于下面这样看起来更简洁的代码,要知道编程风格也是很多面试官重点考察的点,代码阅读时的颗粒度更小,模块化更好,无疑会是加分点。
const tasks = []; // 这里存放异步操作的 Promise
const output = (i) =& new Promise((resolve) =& {
setTimeout(() =& {
console.log(new Date, i);
resolve();
}, 1000 * i);
// 生成全部的异步操作
for (var i = 0; i & 5; i++) {
tasks.push(output(i));
// 异步操作完成之后,输出最后的 i
Promise.all(tasks).then(() =& {
setTimeout(() =& {
console.log(new Date, i);
读到这里的同学,恭喜你,你下次面试遇到类似的问题,至少能拿到 80 分。
我们都知道使用 Promise 处理异步代码比回调机制让代码可读性更高,但是使用 Promise 的问题也很明显,即如果没有处理 Promise 的 reject,会导致错误被,好在新版的 Chrome 和 Node 7.x 能对未处理的异常给出 ,而排查这些错误还需要一些特别的技巧(、)。
追问 3:ES7
既然你都看到这里了,那就再坚持 2 分钟,接下来的内容会让你明白你的坚持是值得的。
多数面试官在决定聘用某个候选人之前还需要考察另外一项重要能力,即技术自驱力,直白的说就是候选人像有内部的马达在驱动他,用漂亮的方式解决工程领域的问题,不断的跟随业务和技术变得越来越牛逼,究竟什么是牛逼?建议阅读程序人生的。
回到正题,既然 Promise 已经被拿下,如何使用 ES7 中的 async await 特性来让这段代码变的更简洁?你是否能够根据自己目前掌握的知识给出答案?请在这里暂停 1 分钟,思考下。
下面是笔者给出的参考代码:
// 模拟其他语言中的 sleep,实际上可以是任何异步操作
const sleep = (timeountMS) =& new Promise((resolve) =& {
setTimeout(resolve, timeountMS);
(async () =& { // 声明即执行的 async 函数表达式
for (var i = 0; i & 5; i++) {
await sleep(1000);
console.log(new Date, i);
await sleep(1000);
console.log(new Date, i);
感谢你花时间读到这里,相信你收获的不仅仅是用 JS 精确控制代码输出的各种技巧,更是对于前端工程师的成长期许:扎实的语言基础、与时俱进的能力、强大技术自驱力。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 nodejs 输入输出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信