標籤:div script java button log avl title www builder
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
寫的很好
JavaScript (function (){}()) 與(function(){})()