日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

函数的自执行,变量提升和函数提升

發(fā)布時(shí)間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数的自执行,变量提升和函数提升 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

其實(shí)之前雖然剛開始學(xué)習(xí)JavaScript的時(shí)候經(jīng)常看到function? add(){}、var add=function(){}、function(){}之類的這種寫法,但是具體是什么叫什么卻沒(méi)有去考慮過(guò)這個(gè)問(wèn)題……

function add(){}這種寫法叫做函數(shù)聲明

var add=function(){}這種寫法叫做函數(shù)表達(dá)式

function(){}這種是匿名函數(shù)

一、函數(shù)的自執(zhí)行

那么有沒(méi)有辦法讓它們不用通過(guò)我們的調(diào)用比如

function add(){}; add();

就可以自我執(zhí)行呢?

我們來(lái)試試看這三種方法

//函數(shù)表達(dá)式自執(zhí)行嘗試 var add=function(x,y){console.log(x y); }(5,6); //結(jié)果:11(正確) //函數(shù)聲明自執(zhí)行嘗試 function add(x,y){console.log(x y); }(5,6); //結(jié)果:無(wú)法執(zhí)行,也沒(méi)有拋出錯(cuò)誤 //匿名函數(shù)自執(zhí)行嘗試 function(){console.log(arguments[0] arguments[1]); }(5,6); //結(jié)果:這個(gè)的問(wèn)題就大了,拋出語(yǔ)法錯(cuò)誤Uncaught SyntaxError: Unexpected token (

函數(shù)表達(dá)式后面加括號(hào)可以立即執(zhí)行函數(shù),然而函數(shù)聲明卻不可以!!

很奇怪地,匿名函數(shù)也是函數(shù)表達(dá)式,但是它為什么會(huì)拋出語(yǔ)法錯(cuò)誤呢?這是因?yàn)槟涿瘮?shù)雖然屬于函數(shù)表達(dá)式,但是很明顯它沒(méi)有賦值操作,JavaScript解析引擎會(huì)把它當(dāng)做函數(shù)聲明,會(huì)跟你要一個(gè)函數(shù)名,但是它是匿名函數(shù),肯定沒(méi)有名字,JavaScript混了,直接給你個(gè)錯(cuò)誤讓你反省一下。

那要怎么解決匿名函數(shù)自執(zhí)行這個(gè)問(wèn)題?其實(shí)很簡(jiǎn)單,只要告訴JavaScript解析器匿名函數(shù)不是函數(shù)聲明就好了。

//加號(hào)function(){console.log(arguments[0] arguments[1]); }(5,6); //減號(hào) -function(){console.log(arguments[0] arguments[1]); }(5,6); //感嘆號(hào) !function(){console.log(arguments[0] arguments[1]); }(5,6); //括號(hào) (function(){console.log(arguments[0] arguments[1]); })(5,6); (function(){console.log(arguments[0] arguments[1]); }(5,6));

接下來(lái)就是解決函數(shù)聲明自執(zhí)行的問(wèn)題了,其實(shí)方法跟匿名函數(shù)自執(zhí)行的方法是一樣的,加號(hào),減號(hào),感嘆號(hào),括號(hào),都可以解決

!function add(x,y){console.log(x y); }(5,6); function add(x,y){console.log(x y); }(5,6); -function add(x,y){console.log(x y); }(5,6); (function add(x,y){console.log(x y); })(5,6); (function add(x,y){console.log(x y); }(5,6));

二、變量提升、函數(shù)提升

函數(shù)聲明才會(huì)提升,函數(shù)表達(dá)式是屬于變量提升

我們先來(lái)看一下下面這段代碼的結(jié)果是什么

console.log(a); console.log(b); console.log(c); var a=1; function b(){return 2; } var c=function(){return 3; }

結(jié)果

console.log(c)的結(jié)果跟console.log(a)是一樣的,說(shuō)明函數(shù)表達(dá)式是屬于變量提升的。這樣證明還是有點(diǎn)草率,我們?cè)賮?lái)看看下面的代碼

console.log(b()); console.log(c()); function b(){return 2; } var c=function(){return 3; }

結(jié)果

結(jié)果很明顯了,函數(shù)c只是提升了變量名c而已,函數(shù)聲明才會(huì)提升!

那么變量的提升和函數(shù)聲明的提升哪個(gè)提升的優(yōu)先級(jí)比較高呢?

console.log(b); console.log(b()); var b=1; function b(){return 2; }

結(jié)果

結(jié)果顯示函數(shù)聲明提升的優(yōu)先級(jí)比變量提升還要高。

?


更多專業(yè)前端知識(shí),請(qǐng)上 【猿2048】www.mk2048.com

總結(jié)

以上是生活随笔為你收集整理的函数的自执行,变量提升和函数提升的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。