最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年08月01日 11:25:51   作者:libuchao  
這篇文章主要介紹了詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

JavaScript 中需要?jiǎng)?chuàng)建函數(shù)的話,有兩種方法:函數(shù)聲明、函數(shù)表達(dá)式,各自寫(xiě)法如下:

// 方法一:函數(shù)聲明

function foo() {}


// 方法二:函數(shù)表達(dá)式
var foo = function () {};

另外還有一種自執(zhí)行函數(shù)表達(dá)式,主要用于創(chuàng)建一個(gè)新的作用域,在此作用域內(nèi)聲明的變量不會(huì)和其它作用域內(nèi)的變量沖突或混淆,大多是以匿名函數(shù)方式存在,且立即自動(dòng)執(zhí)行:

(function () {
  // var x = ...
})();

此種自執(zhí)行函數(shù)表達(dá)式歸類(lèi)于以上兩種方法的第二種,也算是函數(shù)表達(dá)式。

方法一和方法二都創(chuàng)建了一個(gè)函數(shù),且命名為 foo,但是二者還是有區(qū)別的。JavaScript 解釋器中存在一種變量聲明被提升(hoisting)的機(jī)制,也就是說(shuō)變量(函數(shù))的聲明會(huì)被提升到作用域的最前面,即使寫(xiě)代碼的時(shí)候是寫(xiě)在最后面,也還是會(huì)被提升至最前面。

例如以下代碼段:

alert(foo); // function foo() {}
alert(bar); // undefined
function foo() {}
var bar = function bar_fn() {};
alert(foo); // function foo() {}
alert(bar); // function bar_fn() {}

輸出結(jié)果分別是function foo() {}、undefined、function foo() {}和function bar_fn() {}。

可以看到 foo 的聲明是寫(xiě)在 alert 之后,仍然可以被正確調(diào)用,因?yàn)?JavaScript 解釋器會(huì)將其提升到 alert 前面,而以函數(shù)表達(dá)式創(chuàng)建的函數(shù) bar 則不享受此待遇。

那么bar 究竟有沒(méi)有被提升呢,其實(shí)用 var 聲明的變量都會(huì)被提升,只不過(guò)是被先賦值為 undefined 罷了,所以第二個(gè) alert 彈出了 undefined。

所以,JavaScript 引擎執(zhí)行以上代碼的順序可能是這樣的:

  •     創(chuàng)建變量 foo 和 bar,并將它們都賦值為 undefined。
  •     創(chuàng)建函數(shù) foo 的函數(shù)體,并將其賦值給變量 foo。
  •     執(zhí)行前面的兩個(gè) alert。
  •     創(chuàng)建函數(shù) bar_fn,并將其賦值給 bar。
  •     執(zhí)行后面的兩個(gè) alert。

注:

嚴(yán)格地說(shuō),再 JavaScript 中創(chuàng)建函數(shù)的話,還有另外一種方法,稱(chēng)為“函數(shù)構(gòu)造法”:

var foo = Function('alert("hi!");');
var foo = new Function('alert("hi!");'); // 等同于上面一行

此方法以一個(gè)字符串作為參數(shù)形成函數(shù)體。但是用這種方法,執(zhí)行效率方面會(huì)打折扣,且似乎無(wú)法傳遞參數(shù),所以少用為妙。

相關(guān)文章

  • springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán)的過(guò)程解析

    springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán)的過(guò)程解析

    這篇文章主要介紹了springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體實(shí)例解析

    Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體實(shí)例解析

    本文是小編給大家總結(jié)的關(guān)于Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體的內(nèi)容,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • Java中逆序遍歷List集合的實(shí)現(xiàn)

    Java中逆序遍歷List集合的實(shí)現(xiàn)

    本文主要介紹了Java中逆序遍歷List集合的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java生成唯一ID的三種方法總結(jié)

    Java生成唯一ID的三種方法總結(jié)

    單機(jī)環(huán)境下,可以使用AtomicLong來(lái)生成唯一ID;而在需要非純數(shù)字形式的場(chǎng)景中,可以通過(guò)UUID結(jié)合哈希函數(shù)如MD5或SHA-1轉(zhuǎn)換成數(shù)字,但需注意哈希碰撞的低概率風(fēng)險(xiǎn);對(duì)于分布式系統(tǒng),模擬Snowflake算法是一種復(fù)雜但有效的方法,每種方法都有其適用場(chǎng)景和潛在問(wèn)題
    2024-09-09
  • java通過(guò)Jsoup爬取網(wǎng)頁(yè)過(guò)程詳解

    java通過(guò)Jsoup爬取網(wǎng)頁(yè)過(guò)程詳解

    這篇文章主要介紹了java通過(guò)Jsoup爬取網(wǎng)頁(yè)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解Spring中bean實(shí)例化的三種方式

    詳解Spring中bean實(shí)例化的三種方式

    本篇文章主要介紹了詳解Spring中bean實(shí)例化的三種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java多線程Atomic包操作原子變量與原子類(lèi)詳解

    Java多線程Atomic包操作原子變量與原子類(lèi)詳解

    這篇文章主要介紹了Java多線程Atomic包操作原子變量與原子類(lèi)詳解,簡(jiǎn)單介紹了Atomic,同時(shí)涉及java.util.concurrent中的原子變量,Atomic類(lèi)的作用等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    這篇文章主要介紹了SpringMVC五大組件與執(zhí)行原理分析總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • SSM框架把日志信息保存到數(shù)據(jù)庫(kù)過(guò)程詳解

    SSM框架把日志信息保存到數(shù)據(jù)庫(kù)過(guò)程詳解

    這篇文章主要介紹了SSM框架把日志信息保存到數(shù)據(jù)庫(kù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java超詳細(xì)梳理IO流的使用方法上

    Java超詳細(xì)梳理IO流的使用方法上

    流(Stream)是指一連串的數(shù)據(jù)(字符或字節(jié)),是以先進(jìn)先出的方式發(fā)送信息的通道,數(shù)據(jù)源發(fā)送的數(shù)據(jù)經(jīng)過(guò)這個(gè)通道到達(dá)目的地,按流向區(qū)分為輸入流和輸出流
    2022-04-04

最新評(píng)論

万安县| 永修县| 抚宁县| 三明市| 永丰县| 双流县| 象州县| 广饶县| 安泽县| 叶城县| 新建县| 龙胜| 左贡县| 鹤山市| 万年县| 中超| 江北区| 肥西县| 大竹县| 泰州市| 会理县| 清水河县| 梁河县| 铜陵市| 合阳县| 勃利县| 罗平县| 文登市| 锦州市| 邹平县| 兴安盟| 田林县| 皋兰县| 阳新县| 宣汉县| 察哈| 苏尼特右旗| 观塘区| 通化县| 密山市| 汨罗市|