前端面试题-当中不注意的坑

[TOC]

关于闭包

问题一:下面程序的输出问题

for(var i=1;i<5;++i){
 setTimeout(function timer(){ 
   console.log(i);
 },i*1000);
}
  • 这个是最简单的一个,i会每秒输出一个5
  • 解决的方式很简单,就是用闭包
for(var i=1;i<5;++i){
(function(i){ 
setTimeout(function timer(){ 
   console.log(i);
 },i*1000); 
})(i);}
  • 利用ES6 let-闭包的块级作用域解决
for(let i=1;i<5;++i){ 
setTimeout(function timer(){
 console.log(i); 
},i*1000);}

问题二:下面程序输出什么

var name = 'global';
var obj = { 
 name : 'obj', 
 dose : function(){ 
  this.name = 'dose'; 
  return function(){
     return this.name; 
    } 
   }
}
alert(obj.dose().call(this))
//alert(obj.dose().call(obj)) 这样写能看出区别了```
* 这道题还是非常简单的,但是一看到call,bind,apply之类的心就一紧,可能一慌张就答错了

**问题三:**在ES5中如何实现常量
* 这个问题一听我就呵呵了,如何定义呢?没错,还是用闭包
* 实现的思路:把原来的参数隐藏。再利用闭包的特性,将参数存在内存中,这样参数不会消失,也不能被更改

var consts=(function(){
var constant=10;
var p={};
p.get_consts=function(){
return constant;
}
return p;
})();

var gconst=consts.get_consts();


**问题四:**下面程序的输出结果
* 参考
>http://developer.51cto.com/art/201511/498268.htm

function fun(n,o) {
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?

* 估计大部分人都看过,但是当我初次见面之时,还是被吓到了。哎,心理承受估计有点差了,答案就不贴了。感兴趣的自己试试

## 关于JS语法
* 这道题我做的时候,是真的炸了,有几个没答对
* 参考
> http://www.cnblogs.com/xxcanghai/p/5189353.html

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();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

* 感兴趣的朋友可以点链接去看看
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容