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