本文實例講述了JS中超越現實的匿名函數用法。分享給大家供大家參考,具體如下:
一般函數:
function show1(name){ alert(name); //打印:zhangsan }show1("zhangsan");
匿名函數:
var show2 = function (name) { alert(name); //打印:張三 }show2("張三");
上面2種定義函數的區別:
1.我們知道所有的function都會在window對象里
function show1(name){ alert(name); //打印:張三 } window.show1("張三");
即使在函數定義之前調用
window.show1("張三"); function show1(name){ alert(name); //打印:張三 }
這是因為這種”有名字”的函數在JS引擎初始化的時候就加載到作用域里面
2.如果是匿名函數
window.show2("李四"); var show2 = function (name) { alert(name); //打印:李四 }
控制臺會打?。?span style="line-height: 25.2px; color: rgb(255, 0, 0);">TypeError: window.show2 is not a function
二、如果我們需要合并上面2個函數
<script> function show(name) { return function () { alert(name); //內部函數是可以調用外層的變量的 } } show("王五");</script>
猜猜會打印什么?什么也沒有,也不會報錯。這是因為執行show()只是返回了一個函數本身,并沒有執行這個函數。
show("王五")();
這樣執行,就打?。和跷?/p>
如果里面的函數也要傳入變量
<script> function show(name) { return function (age) { alert(name); //打印:王五 alert(age); //打印:18 } } show("王五")(18);</script>
<script> function show(name) { return function (name) { alert(name); } } show("王五")(18);</script>
猜猜是打印“王五”還是“18”?只會打印“18”。
三、匿名函數的自執行
<script> (function (name) { alert(name); //打印:哈哈 })("哈哈")</script>
以上是推薦的寫法。
其他寫法:
-function (name) { alert(name); //打印:哈哈 }("哈哈")
+function (name) { alert(name); //打印:哈哈 }("哈哈")
!function (name) { alert(name); //打印:哈哈 }("哈哈")
[function (name) { alert(name); //打印:哈哈 }("哈哈")]
new function (name) { alert(name); //打印:哈哈 }("哈哈")
~function (name) { alert(name); //打印:哈哈 }("哈哈")
void function (name) { alert(name); //打印:哈哈 }("哈哈")
希望本文所述對大家JavaScript程序設計有所幫助。
新聞熱點
疑難解答