javascript中的函数语句和函数表达式

时间:2015-02-03 10:25:00

标签: javascript

在学习javascript时,我遇到了函数语句和函数表达式。

function fun(){} // function statement
var fun = function() {} //function expression

然后我将这个例子解释为函数表达式。

(function() {
   alert("I am a function");
}());

这真的是一个函数表达式吗?它对我来说似乎是一个功能声明 如

 function() {
   alert("I am not a function statement.");
 };

2 个答案:

答案 0 :(得分:2)

将括号中的函数包装成一个表达式。

这是因为在JavaScript中括号不能包含语句,因此引擎知道将封闭的函数解析为表达式。

如果您使用仅对表达式进行操作的任何其他操作,则情况也是如此:

(function () {}());
!function () {}();
+function () {}();
~function () {}();
void function () {}();

答案 1 :(得分:0)

下面的代码是function expression:因为名称完全使用关键字expression,这意味着它是一个值。如果它只是一个表达式,它将保持一个值,并且可以作为任何其他值传递,即string number boolean。但是,如果它作为参考存储在变量中,它将变为statement or declaration。继续阅读。

function () { }

您还可以为函数表达式指定名称并将其转换为named function expression

function foo() { }

函数名称(上面的foo)仅存在于函数内部,例如,可用于自递归:

Function declaration或语句,即它将值存储在引用变量中,此处引用变量为

var fac = function me(x) { return x <= 1 ? 1 : x * me(x-1) }
fac(10)
3628800
console.log(me)
ReferenceError: me is not defined

命名函数表达式与函数声明(大致是语句)无法区分。但它们的效果是不同的:函数表达式产生一个值(函数)。函数声明导致一个动作 - 创建一个值为函数的变量。此外,只能立即调用函数表达式,而不能调用函数声明。

学分:@rauschma

source-url:Expression vs Statements