JS函数和作用域

函数声明和函数表达式
  • 函数声明:

fuction fn(){
console.log("test");
}

  • 函数表达式:

var fn = fucntion(){
console.log("test");;
}

  • 区别:函数声明可以在任何位置被调用。函数表达式需要在被执行完了后,才能被调用。

变量提升和函数提升
  • 变量提升:当定义一个变量的时候,变量声明会被提升到前面。然后才被赋值。

var a = 10;
相当于
var a;
a = 10;

  • 函数提升:当定义一个函数的时候,函数会自动提前。函数表达式不会被提前,只有函数声明会被提前。
test();//asd
  fucntion test(){
      console.log("asd");
  };

argument

argument是函数参数的列表。是个类数组对象,但他并不是一个真正的数组。所以他只具备length属性。
可以通过一下语句进行转化:
var args=Array.prototype.slice.call(arguments)


函数重载的实现
  • 可以通过argument.length来实现,根据length的不同,来执行不同的代码块。
  • 可以通过if(){}来实现,根据形参的值,来执行不同的代码块。

立即执行函数表达式
(function(){})()

IIFE是函数在声明后立即执行,而且同时可以利用函数的作用域,可以避免全局变量的污染。第一个括号的作用是避免function被解析,让function(){}被当成表达式,立即执行。然后第二个括号就是调用函数。


用递归求n!
function rec(n){
if(n==1){
    return 1;
}
return n*rec(n-1);
}

你可能感兴趣的:(JS函数和作用域)