Javascript的 函数声明 和函数表达式

今天再看一篇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等库的朋友肯定见到过这种写法。

原文地址:https://www.cnblogs.com/heshan664754022/p/3050422.html