js 立即調(diào)用的函數(shù)表達(dá)式如何寫
更新時(shí)間:2014年01月12日 17:39:14 作者:
如果不需要顯示調(diào)用函數(shù), 讓這個(gè)函數(shù)在定義的時(shí)候就執(zhí)行的話, 該如何寫才可以呢,下面為大家介紹下具體的實(shí)現(xiàn)步驟,喜歡的朋友可以了解下
如果不需要顯示調(diào)用函數(shù), 讓這個(gè)函數(shù)在定義的時(shí)候就執(zhí)行的話, 該如何寫才可以呢,接下來(lái)將詳細(xì)介紹實(shí)現(xiàn)步驟,感興趣的朋友可以了解下
1.前言
函數(shù)需要先定義,后使用。 這基本上所有編程語(yǔ)言的一條鐵的定律。
一般狀況下, 我們需要調(diào)用一個(gè)JavaScript 函數(shù), 基本的狀況都是先定義, 然后再調(diào)用。 看一個(gè)例子
代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Say Hello</title>
</head>
<body>
<script>
//define function
function sayHello()
{
alert("hello");
}
//call function
sayHello();
</script>
</body>
</html>
但是如果不需要顯示調(diào)用函數(shù), 讓這個(gè)函數(shù)在定義的時(shí)候就執(zhí)行的話, 該如何寫才可以呢?
2.思考的歷程
從以上的例子來(lái)看,聰明的你結(jié)合以上的使用狀況可能會(huì)想:
===》既然調(diào)用的時(shí)候是在函數(shù)名后面加上一對(duì) 是否在function 定義的后面加上一對(duì)大括號(hào)是否就可以執(zhí)行了呢? 像以下這樣:
代碼如下:
function sayHello()
{
alert("hello");
}();
不幸的是,以上的寫法會(huì)報(bào)出js 的語(yǔ)法錯(cuò)誤。
因?yàn)镴avascript 的解析器在解析器解析全局的function或者function內(nèi)部function關(guān)鍵字的時(shí)候, 默認(rèn)會(huì)把大括號(hào)解析成function聲明,而不是function表達(dá)式。
也就是說(shuō), 會(huì)把最后的一對(duì)大括號(hào)默認(rèn)解析成一個(gè)缺少名字的function,并且拋出一個(gè)語(yǔ)法錯(cuò)誤信息,因?yàn)閒unction聲明需要一個(gè)名字。
===》 你可能又會(huì)想, 如果我在大括號(hào)中傳入?yún)?shù)是否就會(huì)解析成表達(dá)式了呢?
代碼如下:
function sayHello()
{
alert("hello");
}(1);
的確, 錯(cuò)誤是沒(méi)有了。 但是以上的寫法等同于以下寫法的效果
代碼如下:
function sayHello()
{
alert("hello");
};
(1);
這兩句完全沒(méi)有關(guān)系, 函數(shù)還是不會(huì)執(zhí)行
3.正確的寫法
對(duì)于JavaScript 來(lái)說(shuō),括弧()里面不能包含語(yǔ)句,所以在這一點(diǎn)上,解析器在解析function關(guān)鍵字的時(shí)候,會(huì)將相應(yīng)的代碼解析成function表達(dá)式,而不是function聲明所以,只要將大括號(hào)將代碼(包括函數(shù)部分和在后面加上一對(duì)大括號(hào))全部括起來(lái)就可以了。
代碼如下:
(function sayHello()
{
alert("hello");
}());
還有一種寫法也可以, 就是將后面的大括號(hào)移出來(lái), as
代碼如下:
(function sayHello()
{
alert("hello");
})();
推薦是使用第一種方式。
但是目前很多比較好的js library 使用的都是第二種方式。
比如: web 圖形繪制的: git , draw2d ,....
1.前言
函數(shù)需要先定義,后使用。 這基本上所有編程語(yǔ)言的一條鐵的定律。
一般狀況下, 我們需要調(diào)用一個(gè)JavaScript 函數(shù), 基本的狀況都是先定義, 然后再調(diào)用。 看一個(gè)例子
代碼如下:
復(fù)制代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Say Hello</title>
</head>
<body>
<script>
//define function
function sayHello()
{
alert("hello");
}
//call function
sayHello();
</script>
</body>
</html>
但是如果不需要顯示調(diào)用函數(shù), 讓這個(gè)函數(shù)在定義的時(shí)候就執(zhí)行的話, 該如何寫才可以呢?
2.思考的歷程
從以上的例子來(lái)看,聰明的你結(jié)合以上的使用狀況可能會(huì)想:
===》既然調(diào)用的時(shí)候是在函數(shù)名后面加上一對(duì) 是否在function 定義的后面加上一對(duì)大括號(hào)是否就可以執(zhí)行了呢? 像以下這樣:
代碼如下:
復(fù)制代碼 代碼如下:
function sayHello()
{
alert("hello");
}();
不幸的是,以上的寫法會(huì)報(bào)出js 的語(yǔ)法錯(cuò)誤。
因?yàn)镴avascript 的解析器在解析器解析全局的function或者function內(nèi)部function關(guān)鍵字的時(shí)候, 默認(rèn)會(huì)把大括號(hào)解析成function聲明,而不是function表達(dá)式。
也就是說(shuō), 會(huì)把最后的一對(duì)大括號(hào)默認(rèn)解析成一個(gè)缺少名字的function,并且拋出一個(gè)語(yǔ)法錯(cuò)誤信息,因?yàn)閒unction聲明需要一個(gè)名字。
===》 你可能又會(huì)想, 如果我在大括號(hào)中傳入?yún)?shù)是否就會(huì)解析成表達(dá)式了呢?
代碼如下:
復(fù)制代碼 代碼如下:
function sayHello()
{
alert("hello");
}(1);
的確, 錯(cuò)誤是沒(méi)有了。 但是以上的寫法等同于以下寫法的效果
代碼如下:
復(fù)制代碼 代碼如下:
function sayHello()
{
alert("hello");
};
(1);
這兩句完全沒(méi)有關(guān)系, 函數(shù)還是不會(huì)執(zhí)行
3.正確的寫法
對(duì)于JavaScript 來(lái)說(shuō),括弧()里面不能包含語(yǔ)句,所以在這一點(diǎn)上,解析器在解析function關(guān)鍵字的時(shí)候,會(huì)將相應(yīng)的代碼解析成function表達(dá)式,而不是function聲明所以,只要將大括號(hào)將代碼(包括函數(shù)部分和在后面加上一對(duì)大括號(hào))全部括起來(lái)就可以了。
代碼如下:
復(fù)制代碼 代碼如下:
(function sayHello()
{
alert("hello");
}());
還有一種寫法也可以, 就是將后面的大括號(hào)移出來(lái), as
代碼如下:
復(fù)制代碼 代碼如下:
(function sayHello()
{
alert("hello");
})();
推薦是使用第一種方式。
但是目前很多比較好的js library 使用的都是第二種方式。
比如: web 圖形繪制的: git , draw2d ,....
您可能感興趣的文章:
- JS 有名函數(shù)表達(dá)式全面解析
- 深入理解JavaScript系列(4) 立即調(diào)用的函數(shù)表達(dá)式
- js 在定義的時(shí)候立即執(zhí)行的函數(shù)表達(dá)式(function)寫法
- javascript 函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別介紹
- Javascript學(xué)習(xí)筆記之 函數(shù)篇(一) : 函數(shù)聲明和函數(shù)表達(dá)式
- javascript函數(shù)聲明和函數(shù)表達(dá)式區(qū)別分析
- js中函數(shù)聲明與函數(shù)表達(dá)式
- 淺析javascript函數(shù)表達(dá)式
相關(guān)文章
JavaScript獲取radio選中值的幾種常用方法小結(jié)
這篇文章主要介紹了JavaScript獲取radio選中值的幾種常用方法,結(jié)合實(shí)例形式總結(jié)分析了javascript獲取radio選中值的常見(jiàn)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2023-06-06
微信小程序canvas開(kāi)發(fā)水果老虎機(jī)的思路詳解
這篇文章主要介紹了微信小程序canvas開(kāi)發(fā)水果老虎機(jī)的思路,本文通過(guò)思路代碼分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
javascript學(xué)習(xí)筆記之10個(gè)原生技巧
首先在這里要非常感謝無(wú)私分享作品的網(wǎng)友們,這些代碼片段主要由網(wǎng)友們平時(shí)分享的作品代碼里面和經(jīng)常去逛網(wǎng)站然后查看源文件收集到的。把平時(shí)網(wǎng)站上常用的一些實(shí)用功能代碼片段通通收集起來(lái),方便網(wǎng)友們學(xué)習(xí)使用,利用好的話可以加快網(wǎng)友們的開(kāi)發(fā)速度,提高工作效率。2014-05-05
js微信應(yīng)用場(chǎng)景之微信音樂(lè)相冊(cè)案例分享
這篇文章主要為大家分享了js微信應(yīng)用場(chǎng)景之微信音樂(lè)相冊(cè)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
關(guān)于layui表單中按鈕自動(dòng)提交的解決方法
今天小編就為大家分享一篇關(guān)于layui表單中按鈕自動(dòng)提交的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09

