一.函数声明
函数名实际上也是一个指向函数对象的指针。(函数名本身就是变量,可以像传递参数一样传递给另一个函数)
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 ,但是其函数的定义在条件判断之后才有效