JavaScript学习笔记(十) 函数声明VS函数表达式

我们应该在什么时候使用函数声明或函数表达式呢?

当你在语法上不能使用函数声明的时候,你就可以使用函数表达式;

比如:传递一个函数作为参数或者在对象字面量中定义一个函数:

// 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,可选的)是被忽略的,不能通过函数表达式的名字名字(f1)调用函数,只有变量名是有效的,但是函数表达式的名字名字会作为函数的name属性;

但在函数内部是可以通过函数表达式的名字(f1)调用的。


你可能感兴趣的:(JavaScript,JavaScript,JavaScript,JavaScript,JavaScript,function,function,function)