我们应该在什么时候使用函数声明或函数表达式呢?
当你在语法上不能使用函数声明的时候,你就可以使用函数表达式;
比如:传递一个函数作为参数或者在对象字面量中定义一个函数:
// this is a function expression, // pased as an argument to the function `callMe` callMe(function () { // I am an unnamed function expression // also known as an anonymous function }); // this is a named function expression callMe(function me() { // I am a named function expression // and my name is "me" }); // another function expression var myobject = { say: function () { // I am a function expression } };函数声明只能出现在“程序代码”中,意味着只能在其它函数体中或者全局空间;
它们的定义不能不能赋值给一个变量或属性,或者作为一个参数传递出现在函数调用中;
下面的例子是函数声明的允许的用法,foo(),bar()和local()都是通过函数声明模式声明:
// global scope function foo() {} function local() { // local scope function bar() {} return bar; }
像下面这段代码就会报错:
function DeclarationsVSExpression() { //f1(); //f1 is undefined var i=0; var f2 = function f1() { console.info("XXXX"); while(i<10){ i++; f1(); } }; console.info(f2.name); //output f1 f2(); //f1();//f1 is undefined }
但在函数内部是可以通过函数表达式的名字(f1)调用的。