东哥面试题
============
JS高级
1. 判断以下程序的输出结果:
var age=100;
function test(){
this.age=50;
return function(){
return this.age;
}
}
var m=new test();// m = function(){return this.age}
alert(m()); //this指向window age=100 输出100
var n=test();//this 指向window age=50
alert(n()); //50
答案: 100 50
解析:
- 构造函数一旦返回一个对象,就不再创建新对象
- m获得的是function(){ return this.age; }
- n=test(),this指向window。先将全局变量age变为50,又返回一个函数function(){ return this.age; }保存在变量n中
- 调用n时,this指向window。
2.判断以下程序的输出结果:
var name="The Window";
var obj={
name:"My obj",
getName:function(){
return function(){
return this.name;
}
}
};
console.log(obj.getName()());//let fn = obj.getName();let = function(){return this.name} let() this指向window 输出"The Window"
答案:the window
解析:
- obj.getName() 返回一个函数对象function(){ return this.name; }
- (function(){ return this.name; }()) 相当于匿名函数自调,this指向window
3. 判断以下程序的输出结果:
var length=10;
function fn(){
console.log(this.length);
}
var obj={
length:5,
method:function(fn){
fn();
arguments[0]();
}
};
obj.method(fn,1)
答案:10,2
解析:
- fn() this指向window,所以输出10
- arguments0 属于特殊情况,this->arguments,相当于arguments.0(), 所以,this指向arguments。所以length输出的是obj.method()的参数个数,为2.
4. 统计一个字符串中出现次数最多的字符是? 共出现多少次
let str = "helloworld";
let arr = str.split("");
let obj = {};
let max=0;
let maxOfLetter="";
for(let val of arr){
if(!obj[val]){
obj[val]=1;
}else{
obj[val]++;
}
if(obj[val]>max){
max = obj[val];
maxOfLetter = val;
}
}
console.log(maxOfLetter,max);
答案:
let str = "helloworld";
let arr = str.split("");
let obj = {};
let max=1;
let maxOfLetter="";
for(let val of arr){
if(!obj[val]){
obj[val]=1;
}else{
obj[val]++;
if(obj[val]>max){
max = obj[val];
maxOfLetter = val;
}
}
}
console.log(maxOfLetter,max);
答案:
解析:
网友评论