前端工程师面试题JavaScript部分(第三季)

请定义这样一个函数function repeat (func, times, wait) {} 这个函数能返回一个新函数,比如这样用 var repeatedFun = repeat(alert, 10, 5000),调用这个 repeatedFun ("hellworld") 会alert十次 helloworld, 每次间隔5秒

function repeatFun(fn,times,wait){
    var i=0;
       var handle = setInterval(function(){
           fun.apply(null,arguments);
            if(i==9){
                clearInterval(handle);
            };
            i++;
        },wait)
}
function fun(){
    console.log('hello world')
}
repeatFun(fun,10,100)

console代替了alert,而且没有返回函数,闭包一下即可

function repeat (func, times, wait) {
    //不用匿名函数是为了方便调试
    function repeatImpl(){
        var handle,
            _arguments = arguments,
            i = 0;
        handle = setInterval(function(){
            i = i + 1;
            //到达指定次数取消定时器
            if(i === times){
                clearInterval(handle);
                return;
            }
            func.apply(null, _arguments);
        },wait);
    }

    return repeatImpl;
}

//测试用例
var repeatFun = repeat(alert, 4, 3000);

repeatFun("hellworld");

 第二题

写一个函数stringconcat, 要求能var result1 = stringconcat("a", "b")  result1 = "a+b",var stringconcatWithPrefix = stringconcat.prefix("hellworld");var result2 = stringconcatWithPrefix("a", "b")  result2 = "hellworld+a+b",此题需要静态方法的思路才能解;

第三题

function Foo() {
    getName = function () { alert (1); };
    return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
 
//答案:
Foo.getName();//2首先访问静态属性
getName();//4访问变量声明提前
Foo().getName();//1
getName();//1
new Foo.getName();//2
new Foo().getName();//3
new new Foo().getName();//3

其中知识点

console.log('x' in window);//true不管是不是字符串,就是当变量用
var x;
x = 0;
衍生的if("a" in window){
 var a = 10;
}
console.log(a);

关于变量声明提前的  

var x;
function x(){}
console.log(x);
x=1;
//上题中执行顺序应该是这样,被覆盖了x的属性

 

最终执行的顺序是

function
Foo() { getName = function () { alert (1); }; return this; } var getName;//只提升变量声明 function getName() { alert (5);}//提升函数声明,覆盖var的声明 Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; getName = function () { alert (4);};//最终的赋值再次覆盖function getName声明
getName();//最终输出4

 挨个解答:

第一问:

Foo.getName();静态属性,返回2

第二问

getName();变量声明提前,函数声明提前,函数覆盖变量声明4

第三问

Foo().getName();//执行第一个函数返回的this
Foo函数中赋值一个全局变量 getName=function(){alert(1)}
当前作用域没有getName,那么向上寻找也就是window,覆盖外面的getName的定义
这就是污染了全局变量了,this也指向了window,相当于window.getName

第四问

直接调用getName(),全局变量已经被污染了

下面三问涉及运算符优先级

圆括号()>成员访问>new带参数列表>函数调用>new不带参数列表>递增递减>逻辑运算符>一元加法减法>typeof>算数>位移>比较>in,instance>条件,赋值,逗号

第五问

new Foo.getName();
//相当于 new(Foo.getName)(),这里注意运算符优先级,new一个(Foo.getName)2

第六问

(new Foo()).getName();
//关于返回值的问题

构造函数返回值可以没有返回值也可以没有,undifined,有返回值的时候检查是不是引用类型,

是基本类型等于undefined,实例里返回实例化对象

是引用类型的时候返回undefined,实例返回这个引用类型

此处返回了this是实例化对象,没有getName属相,通过原型链找到构造函数的原型对象,3

第七问

new((new Foo().getName)();//3

 

转载于:https://www.cnblogs.com/wgdong/p/5288598.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 高级前端工程师面试题答案pdf是一份面试指南,涵盖了高级前端工程师常见的面试题和对应的答案。这份文档可帮助求职者更好地准备和应对前端工程师面试。 在高级前端工程师面试中,通常会涉及以下几个方面的问题和答案: 1.技术能力和经验:面试官可能会问求职者对于前端开发的技术栈和常用工具的熟悉程度,以及对于特定技术的实践经验。求职者可以根据自己的实际经验和学习情况,结合项目经历和个人技能,详细解答自己对于前端技术的了解和应用。 2.项目经验和解决方案:面试官可能会询问求职者在实际项目中遇到的挑战和解决方案。求职者可以选择一个具体的项目,介绍自己在其中遇到的问题,并详细说明自己是如何解决这些问题的,包括技术方案和团队协作等方面。 3.团队合作和沟通能力:高级前端工程师通常需要与设计师、产品经理和后端工程师等进行密切合作,因此面试官可能会询问求职者在团队中的角色和贡献,以及自己与其他岗位之间的沟通和协调能力。求职者可以列举具体的案例,说明自己在团队中的合作经验和有效沟通的能力。 4.面试题面试官会可能出一些具体的问题,涉及到前端的核心知识点,如HTML、CSS、JavaScript等。求职者需要根据题目的要求,做出清晰、准确的回答,并且能够展示出自己的思考过程和解决问题的能力。 总之,高级前端工程师面试题答案pdf是一份指导性的资料,帮助求职者更好地理解和准备面试。求职者应该根据自己的实际情况和经验,对文档中的问题进行仔细准备,并能够以清晰、有条理的方式进行回答。 ### 回答2: 高级前端工程师面试题答案pdf是一份包含了高级前端工程师面试题的答案的PDF文件。该文件通常由面试官根据候选人在面试中所回答的问题和表现整理而成。以下是一些可能包含在高级前端工程师面试题答案pdf中的内容: 1. 前端技术栈:一般会列出候选人熟悉的前端技术栈,包括HTML、CSS、JavaScript、React、Vue等。 2. 项目经验:候选人在过去的项目中的具体经验和工作职责。包括项目的规模、使用的技术、解决的问题等。 3. 前端框架和库的使用:候选人熟悉的前端框架和库,如React、Vue、Angular等,并列举过去项目中如何使用这些框架和库。 4. 前端性能优化:候选人在前端性能优化方面的实践经验,包括代码优化、资源优化、图片压缩、懒加载等技巧。 5. 数据可视化:候选人在数据可视化方面的经验,如使用D3.js等工具进行数据图表的绘制和展示。 6. 前端安全:候选人对前端安全的了解和实践经验,如防止XSS攻击、CSRF攻击等。 7. 前端工程化:候选人在前端工程化方面的实践经验,如构建工具的使用、模块化开发、持续集成等。 8. 前端团队协作:候选人在团队协作方面的经验,如与设计师、后端工程师的沟通与配合,参与项目管理和代码审查等。 高级前端工程师面试题答案pdf是候选人展示自己专业知识和实践经验的重要材料,面试官可以通过阅读该文件评估候选人的技术能力和项目经验,从而做出招聘决策。 ### 回答3: 高级前端工程师面试题答案pdf是一份包含高级前端工程师面试题的答案的pdf文档。这份文档可能包含了许多常见的高级前端工程师面试题以及它们的详细答案。 高级前端工程师面试题通常涵盖广泛的主题,包括但不限于HTML、CSS、JavaScript前端框架、性能优化、移动端开发等。这些问题的答案可以提供对面试官展示自己技能和知识水平的机会。 在回答高级前端工程师面试题时,关键是要清晰而且详细地回答问题。答案应该经过仔细思考和正确的技术知识支持,以展现自己的专业水平。 此外,在准备面试时,应该对常见的高级前端工程师面试题进行彻底的了解,并在实际开发中多加练习和应用。这样可以更好地理解和回答面试中的问题,并展示出自己的实际经验和解决问题的能力。 总而言之,高级前端工程师面试题答案pdf可以帮助候选人更好地准备面试,展示自己的技能与知识水平,并增加通过面试的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值