Javascript中的函數(shù)聲明與函數(shù)表達(dá)式(奇技淫巧)
更新時(shí)間:2011年03月06日 22:13:14 作者:
Javascript有很多有趣的用法,在Google Code Search里能找到不少,今天從火丁筆記看到的,非常不錯(cuò),推薦大家看下。
舉一個(gè)例子:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
試一下就知道這段代碼的意思就是聲明一個(gè)函數(shù),然后立刻執(zhí)行,因?yàn)镴avascript中的變量作用域是基于函數(shù)的,所以這樣可以避免變量污染,但這里的位運(yùn)算符“~”乍一看讓人摸不到頭腦,如果去掉它再運(yùn)行則會報(bào)錯(cuò):SyntaxError。
在闡述為什么之前,讓我們先來明確Javascript中的兩個(gè)概念:函數(shù)聲明和函數(shù)表達(dá)式:
先來看看什么樣的是函數(shù)聲明:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
再來看看什么樣的是函數(shù)表達(dá)式:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
現(xiàn)在回頭看看文章開頭的問題,為什么去掉位操作符“~”后運(yùn)行會報(bào)錯(cuò),這是因?yàn)閺恼Z法解析的角度看,Javascript不允許在函數(shù)聲明的后面直接使用小括號,而函數(shù)表達(dá)式則沒有這個(gè)限制,通過在函數(shù)聲明前面加上一個(gè)“~”操作符,就可以讓語法解析器把后面看成是函數(shù)表達(dá)式,同樣的,在函數(shù)聲明前面加上“!,+,-”等操作符也是可行的。
那我們?yōu)槭裁床皇褂孟旅孢@種函數(shù)表達(dá)式的方式呢?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
雖然從語法解析的角度看沒有問題,但是上面的代碼存在弊端,它引入了一個(gè)變量,可能會污染現(xiàn)有的運(yùn)行環(huán)境,帶來潛在的問題。
使用位操作符“~”的方法多少顯得有點(diǎn)奇技淫巧,其實(shí)把函數(shù)聲明用小括號套起來更易讀:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
弄明白了原理,不管遇到什么寫法,都不會再丈二和尚摸不著頭腦了。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
試一下就知道這段代碼的意思就是聲明一個(gè)函數(shù),然后立刻執(zhí)行,因?yàn)镴avascript中的變量作用域是基于函數(shù)的,所以這樣可以避免變量污染,但這里的位運(yùn)算符“~”乍一看讓人摸不到頭腦,如果去掉它再運(yùn)行則會報(bào)錯(cuò):SyntaxError。
在闡述為什么之前,讓我們先來明確Javascript中的兩個(gè)概念:函數(shù)聲明和函數(shù)表達(dá)式:
先來看看什么樣的是函數(shù)聲明:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
再來看看什么樣的是函數(shù)表達(dá)式:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
現(xiàn)在回頭看看文章開頭的問題,為什么去掉位操作符“~”后運(yùn)行會報(bào)錯(cuò),這是因?yàn)閺恼Z法解析的角度看,Javascript不允許在函數(shù)聲明的后面直接使用小括號,而函數(shù)表達(dá)式則沒有這個(gè)限制,通過在函數(shù)聲明前面加上一個(gè)“~”操作符,就可以讓語法解析器把后面看成是函數(shù)表達(dá)式,同樣的,在函數(shù)聲明前面加上“!,+,-”等操作符也是可行的。
那我們?yōu)槭裁床皇褂孟旅孢@種函數(shù)表達(dá)式的方式呢?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
雖然從語法解析的角度看沒有問題,但是上面的代碼存在弊端,它引入了一個(gè)變量,可能會污染現(xiàn)有的運(yùn)行環(huán)境,帶來潛在的問題。
使用位操作符“~”的方法多少顯得有點(diǎn)奇技淫巧,其實(shí)把函數(shù)聲明用小括號套起來更易讀:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
弄明白了原理,不管遇到什么寫法,都不會再丈二和尚摸不著頭腦了。
您可能感興趣的文章:
- JavaScript中函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別詳解
- 淺談javascript 函數(shù)表達(dá)式和函數(shù)聲明的區(qū)別
- JavaScript中函數(shù)表達(dá)式和函數(shù)聲明及函數(shù)聲明與函數(shù)表達(dá)式的不同
- 詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式
- js中函數(shù)聲明與函數(shù)表達(dá)式
- JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式區(qū)別淺析
- 淺析javascript中函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別
- javascript函數(shù)聲明和函數(shù)表達(dá)式區(qū)別分析
- Javascript學(xué)習(xí)筆記之 函數(shù)篇(一) : 函數(shù)聲明和函數(shù)表達(dá)式
- javascript 函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別介紹
- 理解 javascript 中的函數(shù)表達(dá)式與函數(shù)聲明
相關(guān)文章
在javascript中,如果刪除二維數(shù)組中重復(fù)的元素
在javascript中,如果刪除二維數(shù)組中重復(fù)的元素...2007-05-05javascript發(fā)送短信驗(yàn)證碼實(shí)現(xiàn)代碼
我們在注冊賬號,或者是參加活動時(shí),都會向手機(jī)發(fā)送收短信驗(yàn)證碼,短信驗(yàn)證碼到底是如何實(shí)現(xiàn)的,本文為大家揭曉,并為大家分項(xiàng)1javascript發(fā)送短信驗(yàn)證碼實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下2015-11-11JS 新增Cookie 取cookie值 刪除cookie 舉例詳解
cookie很實(shí)用的一個(gè)功能,可以判斷某個(gè)狀態(tài),下面與大家分享下JS 如何新增Cookie 取cookie值 刪除cookie,感興趣的朋友可以參考下2014-10-10關(guān)于安卓手機(jī)微信瀏覽器中使用XMLHttpRequest 2上傳圖片顯示字節(jié)數(shù)為0的解決辦法
這篇文章主要介紹了關(guān)于安卓手機(jī)微信瀏覽器中使用XMLHttpRequest 2上傳圖片顯示字節(jié)數(shù)為0的解決辦法 的相關(guān)資料,需要的朋友可以參考下2016-05-05深入理解JavaScript系列(13) This? Yes,this!
在這篇文章里,我們將討論跟執(zhí)行上下文直接相關(guān)的更多細(xì)節(jié)。討論的主題就是this關(guān)鍵字。實(shí)踐證明,這個(gè)主題很難,在不同執(zhí)行上下文中this的確定經(jīng)常會發(fā)生問題2012-01-01解析img圖片沒找到onerror事件 Stack overflow at line: 0
本篇文章主要介紹了img圖片沒找到onerror事件 Stack overflow at line: 0 需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12擴(kuò)展JS Date對象時(shí)間格式化功能的小例子
這篇文章主要介紹了擴(kuò)展JS Date對象時(shí)間格式化功能,有需要的朋友可以參考一下2013-12-12