函数声明和函数表达式

一.函数声明

函数名实际上也是一个指向函数对象的指针。(函数名本身就是变量,可以像传递参数一样传递给另一个函数)

function sum(){
.....
}

二.函数表达式

变量sum也是一个指向函数对象的指针。需要在语句后加上“;”分号

var sum = function(){
......
};

三.两者区别

函数声明:解析器会率先读取函数声明,并使其在执行任何代码之前可用。

函数表达式:提升的是变量sum,代码部分必须等到解析器执行到它所在的代码行,才会真正被解释执行。

四.函数的重复声明

1.如果同一个函数被多次声明,后一个声明会覆盖前一个声明,并且由于函数名的提升,所有调用该函数的地方都采用后一个声明的函数。

function f(){
    console.log(1);
}
f();//10
//由于函数声明会导致函数提升,所以后者覆盖前者,并应用于所有的调用中
function f(){
    console.log(10);
}
f();//10

2.如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

var f = function() {
  console.log('1');
}

function f() {
  console.log('2');
}

f() // 1

 六.不能在条件语句中声明函数

if和try语句没有作用域,其中声明的函数由于变量提升原因,其条件可能是无效的。这是非常容易出错的地方。只有函数才有相当于块级作用域的概念。

要达到在条件语句中定义函数的目的,必须使用函数表达式

if (false) {
  var f = function () {};
}

f() // undefined

提升的是var ,但是其函数的定义在条件判断之后才有效

posted on 2017-06-11 19:00  我爱吃豌豆  阅读(166)  评论(0编辑  收藏  举报

导航