函数声明与函数表达式

来源:互联网 发布:mac如何设置关机时间 编辑:程序博客网 时间:2024/03/28 20:41

函数声明与函数表达式

函数声明:

function 函数名称 (参数:可选){ 函数体 }

函数表达式:

function 函数名称(可选)(参数:可选){ 函数体 }

如何辨别

不包含函数名为函数表达式,如果包含,参见下文

函数声明:

1. function foo(){} // 声明,因为它是程序的一部分2.  (function(){    function bar(){} // 声明,因为它是函数体的一部分    })();

函数表达式

1. var bar = function foo(){}; // 表达式,赋值表达式的一部分2. new function bar(){}; // 表达式,new表达式3. (function foo(){}); // 函数表达式:包含在**分组操作符**内

有何作用

函数声明会在任何表达式被解析和求值之前先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值

eg:

alert(fn()); //正常弹出,因为执行前已定义fnfunction fn() {    return 'Hello world!';}

特例:
if语句也可以声明函数,但各浏览器结果不同

if (true) {  function foo() {    return 'first';  }}else {  function foo() {    return 'second';  }}foo();//经测试Chrome无论条件真假都会返回second;// 相反,这样情况,我们要用函数表达式var foo;if (true) {  foo = function() {    return 'first';  };}else {  foo = function() {    return 'second';  };}foo();

关于分组操作符:

try {    (var x = 5); // 分组操作符,只能包含表达式而不能包含语句:这里的var就是语句,去掉小括号正常;} catch(err) {    // SyntaxError}
0 0