B站陈学辉前端面试题
1、逗号运算符
<script>
vari=0,j=0;
for(;i<10,j<6;i++,j++){
k=i+j;
};
console.log(k);
</script>
答案:10
for循环中判断条件为i<10,j<6。逗号运算符以后面为准,所以相当于j<6,循环五次,最后结果为10(5+5)
2、找数组最小值
找到数组[-1, -2, 1, 10, 4, 5, 8]中的最大值,至少写出两种方法
< script>
var arr=[-1,-2,1,10,4,5,8];
//第一种 直接使用arr.sort()得到的结果是从小到大的结果
var max = arr.sort(function (a, b) {
return b - a;
})[0];
console.1og(max); //10
//第二种 Math的max方法需要把值都输入进去,用扩展运算符。
var max = Math.max(...arr);
console.log(max); //10
//第三种 Infinity是最小的值,以此为基准,循环找最小
var max = -Infinity;
for (var i = 0; i < arr.length; i++) {
if (max < arr[1]) {
max = arr[i];
}
}
console.log(max); //10
</script>
3、i++和++i
<script>
var a = 1;
var b = a++;
console.log(a, b);
var c = 1;
var d = ++c;
console.log(c, d);
</script>
答案:2 1; 2 2
4、弹窗执行顺序
<script>
function fn1() {
alert(1);
}
alert(fn1());
</script>
答案:1 undefined
先执行alert,弹出括号里面的值。括号里面是一个函数,需要得到结果,就先执行一遍函数,执行过程中遇到alert(1),所以先弹出1.函数没有返回值,所以返回值是undefined。
5、闭包运算
script>
//以下代码中,运行的结果为:第次弹__第二次弹_第三次弹
function fn1() {
var a = 0;
function fn2() {
++a;
alert(a);
}
return fn2;
}
fn1()();
var newFn = fn1();
newFn();
newFn();
</script>
答案:1 1 2
fn1()运行函数后得到返回值也就是fn2,fn1()()相当于fn2()。在函数外部调用fn2(),fn2()中没有变量a,向上找值,使用fn1中的变量进行运算,先自增,后弹窗,弹出结果为1。
newFn()实际上就等于fn1()(),因为是新定义的,所以抽头开始,分析过程和上面一样,所以结果也为1。
第二次newFn()和之前不一样的是前面有过了定义,所以是第二次执行,之前所运算的a值为1,在此基础之上再次运算,得到结果为2。
6、this指向 函数预编译
<script>
//下面代码的运行结果是:第一次弹 第二次弹
var a = 100;
function fn() {
alert(a);
var a = 10;
return this.a;
}
alert(fn(