函数声明与函数表达式

函数声明与函数表达式

函数声明:

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()); //正常弹出,因为执行前已定义fn
function 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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值