2019.3.4前端常见面试题

1.1输出结果

1.
var a=1;
function test(){
	alert(a)
	var a=10;
	alert(a)
}
test();
undefined,10
2.
var a=1;
function test(){
	alert(a)
	let a=10;
	alert(a)
}
test();
VM259:3 Uncaught ReferenceError: a is not defined
    at test (<anonymous>:3:8)
    at <anonymous>:7:1

1.2flex布局下的flex-grow、flex-shrink、flex-basis属性详解

值	描述
flex-grow	一个数字,规定项目将相对于其他灵活的项目进行扩展的量。
flex-shrink	一个数字,规定项目将相对于其他灵活的项目进行收缩的量。
flex-basis	项目的长度。合法值:"auto"、"inherit" 或一个后跟 "%"、"px"、"em" 或任何其他长度单位的数字。
auto	与 1 1 auto 相同。
none	与 0 0 auto 相同。
initial	设置该属性为它的默认值,即为 0 1 auto。请参阅 initial。
inherit	从父元素继承该属性。请参阅 inherit。

1.3求阶乘n! 即,1×2×3×4×5×······×n(使用递归算法)

1.
原生求阶乘
function a(n){
	return n>1?n*a(n-1):1;
}
a(4)
24
2.
function n(i){return i<2?1:i*n(i-1);}
n(4)
24
3. 5*4*3
function n(i){return i<2?1:(i+1)*n(i-1);}
n(4)
60
4.扩展arguments.callee的用法
注:argument为函数内部对象,包含传入函数的所有参数,arguments.callee代表函数名,多用于递归调用,防止函数执行与函数名紧紧耦合的现象,对于没有函数名的匿名函数也非常起作用。举例如下:
function factorial(num){
      if(num<=1){
          return 1;
      }else{
          return num*arguments.callee(num-1);  //arguments.callee代表factorial
      }
  }
  var trueFactorial = factorial;
  factorial = function(){
      return 0;
  }
   alert(trueFactorial(5)); //结果为120,因为js中函数没有重载,所以如果递归调用时使用函数名,则执行最后一个该函数名的函数,即返回0
   alert(factorial(5));//结果为0

原生求阶乘
在这里插入图片描述
1.4add(2,3)和add(2)(3)编写一个函数,都返回5,该如何实现?

function add(a, b) {
	if (arguments.length == 2) {
		return a + b;
	} else if (arguments.length == 1) {
		return function(b) {
			return a+b;
		};
	}
}
 
console.log(add(2,3));
console.log(add(2)(3));
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页