function(){} 可以理解为它是一个定义的方法 只是让浏览器知道 有这么一个存在 并不会执行 执行时要带()
一般我们都会这样子写
var a=function(){} ; a();
如果要整合写的话 那么就是 (function(){})() 这样子就相当于 var a=function(){} ; a(); 定义了方法 并且执行了
如果你不写function 前面的括号 那么对于浏览器来说 你只是声明定义了一个方法 并不会执行 而且这个方法还是错误的(这里暂且不提这些了)
其实最外层的()就相当于 eval()函数 来执行括号以内的逻辑代码 可以百度一下JavaScript eval() 函数
那我们现在回头看(function(){}())
(function(){}()) 其实可以这样子看 我只是声明定义了一个方法 并不会执行 而且这个方法还是错误的 编译不会通过 但是我用eavl() 来执行就可以了
所以 (function(){}()) 就等与 eavl(function (){}()) 等于(function(){})() 等于 var a=function(){} ; a(); 其实都是声明了 在使用
有兴趣的话 可以自己试一下 这是我写的测试代码
<html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>hello builder</title> <script type="text/javascript"> function test(){ var person={}; (function(p){ var name=""; p.SetName=function(b){ name=b; } p.GetName=function(){ return name; } }(person)) person.SetName("撒娇的小熊") alert(person.GetName()) } function tests(){ var person={}; eval( function(p){ var name=""; p.SetName=function(b){ name=b; } p.GetName=function(){ return name; } }(person)) person.SetName("撒娇的小熊") alert(person.GetName()) } </script> </head> <body> <input type="button" onclick="test()" value="button"/> <input type="button" onclick="tests()" value="button"/> </body> </html>
弱弱说一句 写这些代码 是为了了解闭包的
大家有兴趣想了解闭包 可以去查阅
https://www.cnblogs.com/wangfupeng1988/p/3977924.html
写的很好