javascript函数声明和函数表达式的区别

定义一个函数,可以有好几种方法,其中最常用的就是函数声明和函数表达式,虽然都可以实现定义函数,但他们之间是有区别的。

1.例如:

1.1 函数声明

function log () {
console.log.apply(console, arguments);
}

log 是函数名,指向它声明的函数对象。

1.2 函数表达式

var log = function () {
      console.log.apply(console, arguments);
};

log 也指向它声明的函数对象, 不过是作为一个变量。

1.3 从后续的调用上来说,他们都能实现同样的效果,没什么差别。但也许你一不小心在函数定义之前调用了,区别就来了。

1.3.1 在函数定义之后调用,效果一样。

function log () {
      console.log.apply(console, arguments);
}

var log2 = function () {
      console.log.apply(console, arguments);
};

log(1);
log2(2);

1.3.2 在函数定义之前调用,log2调用报错。

log(1);
log2(2);

function log () {
      console.log.apply(console, arguments);
}

var log2 = function () {
      console.log.apply(console, arguments);
};

 

1.3.3 原因是解析器对这两种定义读取的顺序不同,解析器会事先读取函数声明,并在执行后续的代码之前使之可以使用;而对于函数表达式,解析器只有在读到函数表达式所在那行的时候才执行,简单点,就类似:

var a = b;
var b=0;
console.log(a);

这时log出来的a是undefined,在赋值a的时候,解析器并没有读到b。

 

posted on 2016-02-16 11:20  草莓蜜酱  阅读(214)  评论(0编辑  收藏  举报

导航