自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Javascript中的函數(shù)聲明和函數(shù)表達(dá)式

開發(fā) 前端
JavaScript是一種基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語言。本文主要介紹的是javascript中的函數(shù)聲明和函數(shù)表達(dá)式,希望對(duì)你有幫助,一起來看。

Javascript是一種由Netscape的LiveScript發(fā)展而來的原型化繼承的面向?qū)ο蟮膭?dòng)態(tài)類型的區(qū)分大小寫的客戶端腳本語言,主要目的是為了解決服務(wù)器端語言,比如Perl,遺留的速度問題,為客戶提供更流暢的瀏覽效果。

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

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

試一下就知道這段代碼的意思就是聲明一個(gè)函數(shù),然后立刻執(zhí)行,因?yàn)镴avascript中的變量作用域是基于函數(shù)的,所以這樣可以避免變量污染,但這里的位運(yùn)算符“~”乍一看讓人摸不到頭腦,如果去掉它再運(yùn)行則會(huì)報(bào)錯(cuò):SyntaxError。

在闡述為什么之前,讓我們先來明確Javascript中的兩個(gè)概念:函數(shù)聲明和函數(shù)表達(dá)式:

先來看看什么樣的是函數(shù)聲明:

 

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

再來看看什么樣的是函數(shù)表達(dá)式:

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

現(xiàn)在回頭看看文章開頭的問題,為什么去掉位操作符“~”后運(yùn)行會(huì)報(bào)錯(cuò),這是因?yàn)閺恼Z法解析的角度看,Javascript不允許在函數(shù)聲明的后面直接使用小括號(hào),而函數(shù)表達(dá)式則沒有這個(gè)限制,通過在函數(shù)聲明前面加上一個(gè)“~”操作符,就可以讓語法解析器把后面看成是函數(shù)表達(dá)式,同樣的,在函數(shù)聲明前面加上“!,+,-”等操作符也是可行的。

那我們?yōu)槭裁床皇褂孟旅孢@種函數(shù)表達(dá)式的方式呢?

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

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

使用位操作符“~”的方法多少顯得有點(diǎn)奇技淫巧,其實(shí)把函數(shù)聲明用小括號(hào)套起來更易讀:

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

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

【編輯推薦】

  1. Web移動(dòng)應(yīng)用 HTML5 CSS和JavaScript
  2. JavaScript開發(fā)規(guī)范要求
  3. Javascript中閉包的作用域鏈
  4. JavaScript實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)下拉框
  5. 讓瀏覽器非阻塞加載javascript的幾種方式
責(zé)任編輯:于鐵 來源: 火丁筆記
相關(guān)推薦

2017-08-01 00:19:15

Javascript函數(shù)函數(shù)聲明

2021-06-28 08:01:57

JS 函數(shù)表達(dá)式函數(shù)聲明

2025-03-12 08:45:15

函數(shù)聲明函數(shù)表達(dá)式IIFE

2010-09-10 15:20:11

SQL函數(shù)計(jì)算表達(dá)式

2010-11-16 14:53:02

Oracle游標(biāo)表達(dá)式

2023-11-02 18:45:00

Rust編程表達(dá)式

2011-05-11 17:40:30

PHP正則表達(dá)式

2020-10-16 06:40:25

C++匿名函數(shù)

2009-08-31 17:11:37

Lambda表達(dá)式

2012-04-28 15:22:46

PHP

2021-08-31 07:19:41

Lambda表達(dá)式C#

2024-12-02 10:56:29

2009-08-10 10:06:10

.NET Lambda

2009-09-16 09:58:53

PHP正則表達(dá)式函數(shù)

2009-10-12 10:11:08

Lambda表達(dá)式編寫

2009-09-16 10:43:22

PHP正則表達(dá)式函數(shù)

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2022-05-26 08:53:47

Go函數(shù)代碼

2021-08-07 07:21:26

AndroidKotlinLambda

2024-03-25 13:46:12

C#Lambda編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)