函数声明与函数表达式

函数也是一种值

在JavaScript中,函数也是一种值,可以赋值给变量,也可以作为参数传递。

1
2
3
4
5
6
7
8
9
10
11
12
13

function t1() {

}

console.log(t1);// ƒ t1() {}

var t2 = function() {

}

console.log(t2); //ƒ() {}

上面两种函数写法,效果是不同的。
t1是函数声明。尽管全局也能得到一个t1变量,打印t1,值是t1函数。
t2是一个赋值过程,值是右侧的表达式的返回结果,即函数本身。

也就是说,function () {} 在JavaScript解释器看来,就和 1+5 或者 2*3一样,是一个表达式,返回一个结果。

因此,t1,t2 两种方法在词法分析时,有着本质区别。

前者,在词法分析时,就发挥作用。
后者,在运行时,才发挥作用。

jquery 也是从这种原理去设计的。

函数表达式的执行

1
2
3
4
5
6
7

var t1 = function() {
alert('wanhai');
}

t1();

如果我们不想赋值,又想调用怎么办呢?

即时函数

即时函数,也叫匿名函数立即执行。

1
2
3
4
5
6
7
8
9

(function(){
alert('wanhai');
})();

(function(b){
alert(b);
})(11);