函数声明:
function aaa(){}
有预解析,在if...else...分别调用不同的函数,要采用函数表达式的形式
函数表达式:
var a = function aaa(){} 命名函数表达式
var a = function (){} 匿名函数表达式
(function aaa(){})() 表达式
~function aaa(){}
!function aaa(){}
+function aaa(){}
-function aaa(){}
区别:
1、函数表达式可以直接后面加括号执行,而函数声明不行
2、函数声明有预解析
递归:
1、使用arguments.callee访问自身的函数来实现递归
2、在严格模式中不支持,使用命名函数表达式来实现
function factorial(num){ if (num<=1){ return 1; } else { return num * arguments.callee(num-1); } } //或者 var factorial = (function f(num){ if (num<=1){ return 1; } else { return num * f(num-1); } }) var an = factorial; factorial = null; an(4)