1、函数声明
var a = 2; function foo(){ var a = 3; console.log(a);//输出3 } foo();//输出3 console.log(a)//输出2
2、函数表达式
var a = 2; (function foo(){ var a = 3; console.log(a);//输出3 })(); //foo();//调用的话会报错 console.log(a)//输出2
3、区分
函数声明和函数表达式区分的简单方法:
function关键词出现的位置,function若是第一个词,就是函数声明。
否则就是一个函数表达式。
4、区别
函数声明和函数表达式最重要的区别是:函数名称标识符的作用域会绑定在何处。
第一个代码段foo会绑定在所在的作用域中,可以通过foo()访问。
第二个代码段中的foo会绑定在函数表达式自身的函数中,而不是所在的作用域中,即只能在函数表达式中访问,外部不能访问;同时好处是不会污染外部作用域(变量)。