js两种声明函数

  • function a(){}
  • var b=function(){}

1.第一种比第二种,多了提升(Hoisting)效果。

a();  
function a(){};这样是可以的。而第二种不行。  

2.第一种声明,还声明另一个属性name。

function a(){};  
console.log(a.name);  //a  
var b=function(){}  
console.log(b.name);  //''  

3.在直接赋值给另外的变量的时候。

var a,b;  
a=b=function(){};  
console.log(b)   //定义了

var c=function d(){console.log(d);};  
c();  //输出d  
console.log(d)  //d is not defined(…)  
等于
var c=(function(){  
    var d=function(){console.log(d)}
    return d;
})();

4.不要在一个非函数代码块(if、while 等)中声明一个函数用function test(){}。浏览器允许你这么做,但它们的解析表现不一致。

因为有些浏览器不用管if,直接就声明了。

if (true) {  
  function test() {
    console.log('true');
  }
}else{
  function test() {
    console.log('false');
  }
}
test();  //在ie8下输出'false';  
//////
var test;  
if (true) {  
   test =function () {
    console.log('true');
  }
}else{
  test =function () {
    console.log('false');
  }
}
test();  //最好的写法。