龙空技术网

前端面试题JavaScript高级

82年的老程序员 112

前言:

此时各位老铁们对“js高级面试题”都比较关怀,兄弟们都想要分析一些“js高级面试题”的相关资讯。那么小编在网上汇集了一些有关“js高级面试题””的相关文章,希望朋友们能喜欢,兄弟们快快来了解一下吧!

判断以下程序的输出结果:

var age=100;

function test(){

this.age=50;

return function(){

return this.age;

}

}

var m=new test();

alert(m());

var n=test();

alert(n());

答案:

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()());

答案:

Undefined

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. 统计一个字符串中出现次数最多的字符是? 共出现多少次

答案:

var dict={};

var c="", max=1;

for(var i=0;i<str.length;i++){

var char=str[i];

if(dict[char]===undefined)

dict[char]=1;

else{

dict[char]+=1;

if(dict[char]>max){

max=dict[char];

c=char;

}

}

}

console.log(c,max);

提前创建一个空对象,用于保存每个字母出现的次数。

提前创建变量,准备保存出现次数最多的字符和出现的次数。

然后,遍历字符串中每个字母,每遍历一个字母就判断结果对象中是否包含以当前字母为属性名的属性。如果不包含以当前字母为属性名的属性,说明是首次遇见该字母,就向结果对象中强行添加以该字母为属性名的属性,值暂时为1。如果结果对象中已经包含以当前字母为属性名的属性,说明不是第一次碰见该字母。则取出该字母名属性对应的次数+1。只要当前字母出现的次数>之前变量中记录的最大次数,就用当前字母和出现次数,取而代之。

标签: #js高级面试题