函数声明和函数表达式有什么区别
-
函数声明
- 函数声明必须有函数名
- 函数可以在任意地方调用fn();
-
函数表达式
- 前后两个函数的名字可以相同也可以不相同
- function 后面的这个名字是可以省略的
- function 后面的这个名字只能再函数内部使用
- 函数调用只有在函数表达式声明后调用。
什么是变量的声明前置?什么是函数的声明前置
变量声明前置
JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,然后给他初始值undefined,然后才逐句执行程序,这就叫做“变量提升”,也即“变量的声明前置”。函数声明前置
和变量的声明会前置一样,函数声明同样会前置
arguments 是什么
- arguments 是JavaScript里的一个内置对象,有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数。object对象。
函数的"重载"怎样实现
- js中没有重载! 同名函数会覆盖。 但可以在函数体针对不同的参数调用执行相应的逻辑
立即执行函数表达式是什么?有什么作用
- 立即执行函数表达式有多种写法:(function(){})();, 或(function(){}()); ,或!function(){}();,或void function(){}();
- 作用:创建一个独立的作用域。这个作用域里面的变量,外面访问不到(即避免变量污染)
求n!,用递归来实现
function factor(n){
if (n == 0) {
return 1;
}
if (n > 0) {
if(n === 1) {
return 1;
}
return n * factor(n-1);
} else if (n < 0) {
if(n === -1) {
return -1;
}
return n * factor(n+1);
}
}