JavaScript的面试题

一、算术题

 1.分别使用循环以及递归算法实现10的阶乘。

        方法一:for循环

for(i=1,s=1;i<=10;i++){
   s*=i;
}
console.log(s);

        方法二:递归函数

function jie={
   var s=1;
   for(i=1;i<=10;i++){
   s*=i;
   i++;
   }
console.log(s);
}

2.使用循环打印九九乘法表。

for(i=1;i<=9;i++){
   for(j=1;j<=i;j++){
       console.log(j+'*'+i+'='+i*j+'&nbsp;&nbsp;&nbsp;');//由于乘法表的第一个数小于第二个数,所以第一个数是j,第二个数是i。
       if(i==j){ //当i和j相等的时候换行
       console.log("<br/>");
       }
    }
}

3.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

        答题思路:

        1.可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

        2.需要四个变量:三位数,和不同排列方式的总和。

        方法一:

var count=0;
   for(i=1;i<=4;i++){  //百位数
       for(j=1;j<=4;j++){ //十位数
           for(k=1;k<=4;k++){  //个位数
               if(i!=j&&i!=k&&j!=k){  //三位数不能重复
                console.log(i+''+j+''+k);
                count++;
                }
            }
        }
    }
console.log(count);

        方法二:

var sum = 0;//三位数
var count = 0;//数量
// 1.先把三位数都列举出来,筛选
for(var i=1;i<=4;i++){
   for(var j=1;j<=4;j++){
       for(var k=1;k<=4;k++){
           if(i!==j&&i!==k&&j!==k){
               sum =i*100+j*10+k;
               console.log(sum);
               count++;
            }
        }
    }
}
console.log("count="+count);

4.判断101-200之间有多少个素数,并输出所有素数(只能被1和它本身整除的自然数为素数)

        方法一:

for(i=101;i<=200;i++){
   for(j=2;j<=i;j++){
      var count=0;
      if(i%j==0){
         break;
       }
      else{
         console.log(i);
         count++;
       }
       console.log(count);
    }
}

        方法二:

// 101-200 只能被1和它本身整除的自然数为素数
// 假设法  假设一个变量为true,代表他就是素数,if判断为false的话,就不是素数
// var  ES5中定义变量的关键字
// let ES6  局部定义
let count = 0;
for (let n = 101; n <= 200; n++) {
    let tf = true;
    for (let i = 2; i < n; i++) {            
        if (n % i == 0) {               
           tf = false;//不是素数
        }
    }
    if (tf) {            
       count++;
       console.log(n);
     }
}
document.write("第二题:<br>" + "101-200之间有" + count + "个素数")

 5.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

// 1.三位数  100-999  i  
// 2.个十百位的三次方加起来等于它本身 bsg
// 3.逻辑:先把三位数全部循环出来,然后判断他的每一位是否符合我们需要的条件
// 4.外层循环:三位数的循环
// 5.表示个十百位:123  123%100  123%100/10  123%10

for(var i=100;i<=999;i++){  //取100-999之间的所有数
   var b =parseInt(i/100) //给百位数取整
   var s= parseInt((i%100)/10) //给十位数取整
   var g = i%10  //取个位数
   if(b*b*b+s*s*s+g*g*g==i){  //百 十 个 数的3次方全等于i结果为水仙花数
      console.log(i);
    }
}

 6.给定一个数组,输出数组的每个数的平方的数组

var array=[1,2,3,4,5];
var newArray=array.map(function(item){
return item*item;
})

 

二、概念题

1.js基本数据类型

        答:Undefined、String、Null、Boolean、Number

2.闭包是什么,写一个简单的闭包

        答:闭包是一个函数包含着另一个函数,使作用域链得不到释放,从而形成闭包。

        缺点: 

        (1) 被引用的私有变量不能被销毁,增大内存消耗、造成内存泄漏、解决方法有在使用完变量之后可以手动为它赋值null。

        (2)由于闭包涉及的跨域访问,所以会导致性能损失。解决方法有可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。

        优点:

        (1)保护函数变量的安全,实现封装,防止变量流入其他环境发生命名冲突

        (2)在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)。

        解决闭包的方法:立即执行函数。可以减少内存消耗。

        (function(){}){}

        写一个简单的闭包:

var age=10;
function f00(){
   console.log(age);
   var name="hunt_bo";
   return function(){
       console.log(name);
    }
}
console.log(name);
var bar=foo();
bar();        

3.原型和原型链

        答:原型:有两种:

                (1)显示原型:prototype 每个函数都有一个  在定义时自动添加的,默认值是一个空的Object对象

                (2)隐式原型:__proto__  每个实例对象都有一个  创建时自动添加的,默认值是构造函数的prototype属性值。

                (3)对象的隐式原型的值是其函数显示原型的值

            原型链:访问一个对象的属性时,现在自身的属性中查找,如果没有找到,就要沿着__proto__这条链上查找,找到返回,如果还没有就返回undefined。而这条链就是原型链。

4.作用域

        答:全局作用域:指定是window

                函数作用域:指定是函数内部

5.this指的是什么?

        1.如果单独使用this ,表示全局。

        2.如果在函数内使用this ,函数所属者会绑定在this上。

        3.在事件中使用this,在html中,this指向接受html的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值