今天再看一篇BLOG的时候,发现那篇文章一直在说函数声明和函数表达式,
弄得我有点晕了,后来整理了一下。其实这两个概念以前早就用过,只不过是没有注意到它们的名字而已!
1.
函数声明:
function a(){ alert("hello world") }//这就是一个函数声明
函数表达式:
var a=function(){ alert("hello world") }//这就是一个函数表达式
那么它们两个有什么区别呢?
函数的声明的解析是在预执行阶段,也就是浏览器准备执行代码的时候,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析。
2.下面是一些看起来很怪异的函数
~function a(){ alert(1111); }();
+function a(){ alert(1111); }();
但是当你把~ +去掉后他们又会报一个SyntaxError的错误。这是因为从语法解析的角度看,Javascript不允许在函数声明的后面直接使用小括号,而函数表达式则没有这个限制,通过在函数声明前面加上一个"~“,"+","-","!"操作符,就可以让语法解析器把后面看成是函数表达式,但是不同的操作符性能就不太一样了,如果你想了解的话,可以参考以下博文:http://www.swordair.com/blog/2011/10/714/。其实上面的函数可以这样写。
var a=function(){ alert(1111); }();
但是这样又会出现一个问题,因为你定义了一个变量,它会污染当前的运行环境,从而带来潜在的危险。
但是如果你不喜欢在前面加上"~“,"+","-","!"操作符,可以按下面这样写,其实这也是很多js库常用的方式。
(function a(){ alert(1111); })();
相信看过prototype、jquery等库的朋友肯定见到过这种写法。