• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    javaScript的函數對象的聲明詳解_javascript技巧

    來源:懂視網 責編:小采 時間:2020-11-27 21:34:07
    文檔

    javaScript的函數對象的聲明詳解_javascript技巧

    javaScript的函數對象的聲明詳解_javascript技巧:寫作緣由: 平時再用js寫函數的時候,一般都是以慣例 function fn () {} 的方式來聲明一個函數,在閱讀一些優秀插件的時候又不免見到 var fn = function () {} 這種函數的創建,究竟他們用起來有什么區別呢,今天就本著打破砂鍋問到底的精神,好好來說說這
    推薦度:
    導讀javaScript的函數對象的聲明詳解_javascript技巧:寫作緣由: 平時再用js寫函數的時候,一般都是以慣例 function fn () {} 的方式來聲明一個函數,在閱讀一些優秀插件的時候又不免見到 var fn = function () {} 這種函數的創建,究竟他們用起來有什么區別呢,今天就本著打破砂鍋問到底的精神,好好來說說這
    寫作緣由:  

      平時再用js寫函數的時候,一般都是以慣例 function fn () {} 的方式來聲明一個函數,在閱讀一些優秀插件的時候又不免見到     var fn = function () {} 這種函數的創建,究竟他們用起來有什么區別呢,今天就本著打破砂鍋問到底的精神,好好來說說這個讓人神魂顛倒的--函數聲明。

    函數聲明

      函數聲明示例代碼

    代碼如下:
    function fn () {
    console.log('fn 函數執行..');
    // code..
    }

      這樣我們就聲明了一個名稱為fn的函數,這里出個思考,你認為在這個函數的上面來調用他的話會執行嗎?還是會報錯?

    fn(); // 在之前調用我們聲明的fn函數

    代碼如下:
    function fn () {
    console.log('fn 函數執行..');
    // code..
    }

      控制臺輸出結果:

      是的,此時fn函數是可以被調用到的,這里來總結下原因。

    總結:

      1:此時fn函數是變量的結果,默認存儲在全局上下文的變量中(可用 window.函數名 來驗證)

      2:此方式為函數聲明,在進入全局上下文階段創建,代碼執行階段,它們已經可用。ps:javaScript在每次進入方法時都會先初始化上下文環境(由全局 → 局部)

      3:它可以影響變量對象(僅影響存儲在上下文中的變量)

    函數表達式

      函數表達式示例代碼

    代碼如下:
    var fn = function () {
    console.log('fn 函數【表達式】聲明執行..')
    // code..
    }

      這樣我們就聲明了一個匿名函數,并且把它的引用指向了變量fn?

      再次在該表達式聲明的函數上下方各調用一次,來看控制臺的輸出結果。

    代碼如下:
    // 為了清晰的看到控制臺的輸出,我們在各自調用前后做個標記,增加可讀性。
    console.log('之前調用開始..');
    fn();
    console.log('之前調用結束..');
    var fn = function () {
    console.log('fn 函數【表達式】聲明執行..')
    // code..
    }
    console.log('之后調用開始..');
    fn();
    console.log('之后調用開始..');

      控制臺打印結果:

      可以看到代碼在執行到第一次調用fn()函數的時候,提示:fn is not a function (fn 不是一個方法),遇到錯誤而終止運行。

      這說明在第一次調用fn()的同時,var fn 變量沒有做為全局對象的一個屬性而存在,且 fn 引用的匿名函數上下文也沒有被初始化,所以在他之前調用失敗。

    代碼如下:
    // 現在先把之前的調用邏輯給注釋掉,再看下控制臺的輸出
    // console.log('之前調用開始..');
    // fn();
    // console.log('之前調用結束..');
    var fn = function () {
    console.log('fn 函數【表達式】聲明執行..')
    // code..
    }
    console.log('之后調用開始..');
    fn(); // 在表達式之后調用
    console.log('之后調用開始..');

      控制臺打印結果:

      可以看出,在該表達式函數之后來調用是可以的,來總結下那是為什么呢?

    總結:

      1:首先變量本身不做為一個函數存在,而是一個匿名函數的引用(值類型的不屬于引用)

      2:在代碼執行階段,初始化全局上下文時,它沒有被做為全局的一個屬性而存在,所以不會造成變量對象的污染

      3:該類型的聲明一般在插件的開發比較常見,也可做為閉包中回調函數的調用

      所以 function fn () {} 并不等于 var fn = function () {} ,他們有本質上的區別。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    javaScript的函數對象的聲明詳解_javascript技巧

    javaScript的函數對象的聲明詳解_javascript技巧:寫作緣由: 平時再用js寫函數的時候,一般都是以慣例 function fn () {} 的方式來聲明一個函數,在閱讀一些優秀插件的時候又不免見到 var fn = function () {} 這種函數的創建,究竟他們用起來有什么區別呢,今天就本著打破砂鍋問到底的精神,好好來說說這
    推薦度:
    標簽: js 對象 聲明
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99re热这里只有精品视频中文字幕 | 久久Av无码精品人妻系列| 天天爽夜夜爽精品视频app| 中文字幕日韩精品有码视频 | 亚洲欧美日韩精品久久亚洲区 | 免费精品精品国产欧美在线欧美高清免费一级在线 | 国产精品熟女一区二区| 青青久久精品国产免费看| 999国产精品视频| 国产精品黄网站| 国产精品无套内射迪丽热巴| 中文字幕精品无码一区二区| 久久精品国产一区二区| 国产在线精品观看免费观看| 欧美精品免费在线| 国产精品91av| 91在线视频精品| 99精品免费视频| 2018国产精华国产精品| 国产精品亚洲日韩欧美色窝窝色欲 | 精品国产免费人成网站| 成人国产精品一区二区视频| 精品一区二区三区免费| 大伊香蕉精品视频在线导航 | 日韩精品人成在线播放| 欧美成人精品网站播放| 精品视频一区二区三区| 国产午夜福利精品久久| 国产精品一区二区av不卡| 国产亚洲午夜高清国产拍精品| 国产精品手机在线观看你懂的| 国产AV国片精品一区二区| 午夜精品在线观看| 99在线精品一区二区三区| 午夜精品久久久久久久无码| 无码人妻精品一区二| 欧美国产成人精品一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 无码人妻精品一区二| 亚洲精品乱码久久久久久中文字幕| 最新国产精品拍自在线观看|