function表达式和function语句

首先我们看下什么是function表达式和function语句:

1
2
function f() {}       //function语句
var f = function() {} //function表达式

javascript语言中的function语句在解析时会发生被预先加载的情况。这意味着不管function被放置在哪里,它都会被移动到被定义时所在的作用域顶层,造成了javascript函数不必先声明后使用的特性,但这种特性也导致了javascript的混乱。下面看两段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a=10;
console.log(a); //10

function a1(){
a=2;
}
a1();
console.log(a); //4

function a1(){
a=4;
}
a1();
console.log(a); //4

继续看一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
var a=10;
console.log(a); //10
var a1=function(){
a=2;
}
a1();
console.log(a); //2

var a1=function(){
a=4;
}
a1();
console.log(a); //4

推荐使用第二种形式,因为它能明确表示f是一个包含一个函数值的变量。要用好JavaScript这门语言,理解函数就是数值是很重要的。
那么,你能说出下面代码的答案吗?

1
2
3
4
5
var value = 1;
function value(){
return 1;
}
console.log(typeof value);

这一段呢?

1
2
3
4
5
var value = 1;
var value = function(){
return 1;
}
console.log(typeof value);

提示:

  1. 函数声明优先,但是赋值又是另外一个操作了;
  2. function表达式包括了声明赋值两个步骤。

感谢您的阅读,有不足之处请在评论为我指出。

版权声明:本文为博主原创文章,未经博主允许不得转载。本文地址 http://yangyuji.github.io/2015/06/19/javascript-function/