成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Javascript中的函數聲明和函數表達式

開發 前端
JavaScript是一種基于對象和事件驅動并具有相對安全性的客戶端腳本語言。本文主要介紹的是javascript中的函數聲明和函數表達式,希望對你有幫助,一起來看。

Javascript是一種由Netscape的LiveScript發展而來的原型化繼承的面向對象的動態類型的區分大小寫的客戶端腳本語言,主要目的是為了解決服務器端語言,比如Perl,遺留的速度問題,為客戶提供更流暢的瀏覽效果。

Javascript有很多有趣的用法,在Google Code Search里能找到不少,舉一個例子:

  1. <script>  
  2. ~function() {  
  3. alert("hello, world.");  
  4. }();  
  5. </script> 

試一下就知道這段代碼的意思就是聲明一個函數,然后立刻執行,因為Javascript中的變量作用域是基于函數的,所以這樣可以避免變量污染,但這里的位運算符“~”乍一看讓人摸不到頭腦,如果去掉它再運行則會報錯:SyntaxError。

在闡述為什么之前,讓我們先來明確Javascript中的兩個概念:函數聲明和函數表達式:

先來看看什么樣的是函數聲明:

 

  1. <script>  
  2. function()   
  3. {  
  4. alert("hello, world.");  
  5. };  
  6. function foo()   
  7. {  
  8. alert("hello, world.");  
  9. };  
  10. </script> 

再來看看什么樣的是函數表達式:

  1. <script>  
  2. var foo = function()   
  3. {  
  4. alert("hello, world.");  
  5. };  
  6. </script> 

現在回頭看看文章開頭的問題,為什么去掉位操作符“~”后運行會報錯,這是因為從語法解析的角度看,Javascript不允許在函數聲明的后面直接使用小括號,而函數表達式則沒有這個限制,通過在函數聲明前面加上一個“~”操作符,就可以讓語法解析器把后面看成是函數表達式,同樣的,在函數聲明前面加上“!,+,-”等操作符也是可行的。

那我們為什么不使用下面這種函數表達式的方式呢?

  1. <script>  
  2. var foo = function()   
  3. {  
  4. alert("hello, world.");  
  5. }();  
  6. </script> 

雖然從語法解析的角度看沒有問題,但是上面的代碼存在弊端,它引入了一個變量,可能會污染現有的運行環境,帶來潛在的問題。

使用位操作符“~”的方法多少顯得有點奇技淫巧,其實把函數聲明用小括號套起來更易讀:

  1. <script>  
  2. (function()   
  3. {  
  4. alert("hello, world.");  
  5. })();  
  6. </script> 

弄明白了原理,不管遇到什么寫法,都不會再丈二和尚摸不著頭腦了。

【編輯推薦】

  1. Web移動應用 HTML5 CSS和JavaScript
  2. JavaScript開發規范要求
  3. Javascript中閉包的作用域鏈
  4. JavaScript實現二級聯動下拉框
  5. 讓瀏覽器非阻塞加載javascript的幾種方式
責任編輯:于鐵 來源: 火丁筆記
相關推薦

2017-08-01 00:19:15

Javascript函數函數聲明

2021-06-28 08:01:57

JS 函數表達式函數聲明

2025-03-12 08:45:15

函數聲明函數表達式IIFE

2010-11-16 14:53:02

Oracle游標表達式

2010-09-10 15:20:11

SQL函數計算表達式

2023-11-02 18:45:00

Rust編程表達式

2011-05-11 17:40:30

PHP正則表達式

2020-10-16 06:40:25

C++匿名函數

2009-08-31 17:11:37

Lambda表達式

2012-04-28 15:22:46

PHP

2021-08-31 07:19:41

Lambda表達式C#

2024-12-02 10:56:29

2009-08-10 10:06:10

.NET Lambda

2009-07-21 14:03:00

Scalaif表達式while循環

2009-09-16 09:58:53

PHP正則表達式函數

2009-09-16 10:43:22

PHP正則表達式函數

2009-10-12 10:11:08

Lambda表達式編寫

2022-05-26 08:53:47

Go函數代碼

2021-08-07 07:21:26

AndroidKotlinLambda

2024-03-25 13:46:12

C#Lambda編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人免费视频 | 国产亚洲精品久久久久动 | 亚洲免费精品 | 国产精品久久精品 | 亚洲日本中文字幕在线 | 欧美中文一区 | 97免费在线观看视频 | 国产精品伦理一区二区三区 | 色精品| 久久久久中文字幕 | 精品久久久久久久久久久下田 | 亚洲久视频 | 一级一级毛片免费看 | 久久久久久国产精品 | 韩日在线观看视频 | 亚洲精品久久久久久久久久吃药 | 亚洲午夜精品在线观看 | av电影手机版 | 免费高清成人 | 久久精品 | 欧美 日韩 中文 | 久综合 | 天堂av免费观看 | 亚洲精品国产偷自在线观看 | 99久久精品国产一区二区三区 | 国产免费麻豆视频 | 黄色毛片在线观看 | 在线第一页 | www操操 | 亚洲欧美自拍偷拍视频 | 欧美精产国品一二三区 | 精品国产乱码久久久久久88av | 久久精品中文 | 久久国产精品一区二区三区 | 亚洲a级| 久草免费电影 | 插插插干干干 | 99在线免费视频 | 国产乱一区二区三区视频 | 国产亚洲精品美女久久久久久久久久 | 五月婷婷视频 |