函数与作用域

2017-12-03  本文已影响0人  gigi1226

1.函数声明和函数表达式有什么区别

function sayHello(){
  console.log('hello')
}
var sayName = function sayHello(){
  console.log('hello')
};
sayName()

2.什么是变量的声明前置?什么是函数的声明前置

var name = 'a';

function sayName(){
  console.log(name);//输出undefined
  var name = 'a';
  console.log(name);//输出'a'
}
sayName();

相当于
var name = 'a';

function sayName(){
  var a;
  console.log(name);//变量提升,但未赋值则输出undefined
  name = 'a';//变量赋值
  console.log(name);//输出'a'
}
sayName();
var say = function(){
  console.log('1');
};

function say(){
  console.log('2');
};

say(); //输出:'1'

相当于
function say (){
  console.log('2'); //函数声明提升
}
var say;//变量声明提升

say = function(){//变量赋值保持原位执行,say函数被覆盖
  console.log('1');
};
say(); //输出:'1'

console.log(say); //输出:[Function: say]

function say(){
  console.log('1');
};

var say = '2';

console.log(say); //输出'2'

3.arguments 是什么

 var foo = function () {
   console.log(arguments.length)
 }
 foo() // 0
 foo(1, 2) // 2

4.函数的"重载"怎样实现

在JS中没有重载!同名函数会覆盖。但可以在函数体针对不同的参数调用执行相应的逻辑

function printPeopleInfo(name, age, sex){
    if(name){
      console.log(name);
    }

    if(age){
      console.log(age);
    }

    if(sex){
      console.log(sex);
    }
  }


  printPeopleInfo('Byron', 26);
  printPeopleInfo('Byron', 26, 'male');
  Byron
  26
  Byron
  26
  male
 undefined

5.立即执行函数表达式是什么?有什么作用

(function(){
  var a = 1;
})()

其他写法

true && function(){ /* code */ }();
(function fn1() {});
//在数组初始化器内只能是表达式
[function fn2() {}];
//逗号也只能是操作表达式
1,function fn3() {};

6.求n!,用递归来实现

function factor(n){
                        if(n === 0 ){
                                return 0
                        }
            if(n === 1){
                return 1
            }
            return n * factor(n - 1)
        }
        factor(5);
上一篇 下一篇

猜你喜欢

热点阅读