function myfunc() { // .. }
这是个函数,这样理解, myfunc只是外层作用域的一个变量,指向刚刚声明的function. 也就是说,function本身就是一个值, 就像 40 或者 [a,b,c]一样.
也就是说,函数本身可以作为一个值赋给变量,或者作为参数传递给其他函数以及作为其他函数的返回值
这样,一个函数值应该被认为是一个表达式,就像任何其他值或表达式
var test = function() { //... }; var a = function table(){ //... };
分配变量test的第一个函数表达式是匿名函数,这个函数没有函数名。
第二个函数是命名(table)函数,尽管它的引用被赋值给变量a.
立即执行函数表达式
上面的函数,我们需要执行,必须调用来执行
test();
x();
还有的函数,不需要这样调用,马上就执行。我们称之为立即执行函数表达式(IIFE, immediately invoked function expression)
(function IIFE(){ // do something })();
立即执行函数也可以有返回值:
var x = (function IIFE(){ return 30; })(); x; //30
IIFE命名函数执行并返回了值42,然后该值被赋给变量x