js函数声明与函数表达式

function a(){}这种叫函数声明, function(){},var fn=function(){},var fn=function a(){}这种是函数表达式,var fn=function a(){}中的a相当于一个函数局部变量,只能在这个函数内部使用,如var fn = function fib(n){if(n<=1){return 1}else{return fib(n-2)+fib(n-1)}}, 在函数外部只能使用fn不能使用fib。

函数声明会被js引擎提前(hoist),因此函数调用可以写在声明前面,如fn();function fn(){}正常执行,而fn();var fn=function(){}错误。函数表达式只有在解释器执行到那一行时才进行解释。

函数声明可以转变为表达式,如上面的var fn=function a(){}即被转变为表达式,同时样~ + - !和&&,()等运算符也可以。经常见到js代码中!function a(){}(),+function a(){}(), (function a(){})(), (function a(){})()。function a(){}()这种写法是非法的,前面像是函数声明,后面()是执行函数,把函数声明转变为函数表达式就可以了。

函数没有return默认返回undefined,在函数前面加!是把函数声明转变为表达式来执行,执行后这个函数消失,同时!function fn(){}()结果是true。

在js代码首行前面加;,因为js可以用空行来分隔代码(正常情况下应该用分号),在js被压缩时,空行会被删掉,因此你的js首行前面加;是为了防止压缩js代码和你的代码之间没有;而报错。

猜你喜欢

转载自lg-asus.iteye.com/blog/2395863