一、算术题
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+' ');//由于乘法表的第一个数小于第二个数,所以第一个数是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的元素。