这两种是有区别的,一种是函数声明,一种是函数表达式。
函数声明:
funName()//正常执行 function funName(){ //code }
函数表达式:
funName()//报错 var funName=function(){ //code }
解析器在向执行环境加载数据时,对这两种是有区别的:
解析器会率先读取函数声明,以确保在执行任何代码之前可以访问,
而函数表达式,则必须等到解析器执行到他所在的代码才会被真正执行。
另外除了这一点区别,函数声明与函数表达式的语法其实是等价的。
注:
实际开发中,建议使用第二种方式。
在实际开发中,存在各种各样的js文件,各种js文件互相引入,当业务逻辑相似,函数功能相似的时候,就有可能使函数名重复,如果使用第一种方式,这个时候就会覆盖先前代码的函数声明。
由于JavaScript是单线程的执行方式,使用第二种方式,可以使原来的js函数得以执行,同时又使新引入的函数执行成功。
var fun = function(){ console.log(1); } fun();//1 /* 以下是引入文件 文件中可能出现相同的函数名 <script src="/js/file.js"> */ var fun = function(){ console.log(2); } fun();//2
如果是使用第一种方式,则两次执行都会是2.
当然了,使用第一种方式也没有太大问题,如果出现重名,开发的时候是会注意到,功能出现问题,测试的时候也能测出来。但显然第二种方式比较符合开发规范。
原文出处:
https://segmentfault.com/q/1010000006776513/a-1020000006776587