成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從一個小題目談?wù)刯s函數(shù)閉包

JasinYip / 3205人閱讀

摘要:先來看一個問題題目前端當(dāng)然這里輸出的是結(jié)果是前端如果現(xiàn)在將變成那么輸出的結(jié)果就會變成解答其實(shí)這題并不是很難,第一句其實(shí)是定義了兩個全局的變量,在利用的閉包內(nèi)用重新定義了而沒有重新定義我們知道在默認(rèn)情況下如果不用定義的變量都會變成全局變量,所

先來看一個問題 題目
var str1 = str2 = "web";
(function () {
var str1 = str2 = "前端";
})();
console.log(str2);

當(dāng)然這里輸出的是結(jié)果是: 前端

如果現(xiàn)在將console.log(str2)變成consloe.log(str1),那么輸出的結(jié)果就會變成 web

解答

其實(shí)這題并不是很難,第一句 var str1 = str2 = "web"; 其實(shí)是定義了兩個全局的變量,在利用function的閉包內(nèi)用 var 重新定義了 str1 而沒有重新定義 str2

我們知道在默認(rèn)情況下 如果不用 var 定義的變量都會變成全局變量,所以此時在function閉包內(nèi)的str2就是引用了全局變量,所以賦值操作當(dāng)然也就能賦予全局變量 str2 所以輸出 str2 結(jié)果是 "前端"

str1 用了 var 定義,就是在function閉包內(nèi)的變量,閉包外自然不可以改變,所以輸出的結(jié)果是 "web"

腦洞大開

其實(shí)每一次看到這種形式的代碼

(function(){
})()

都覺得非常的新鮮,覺得這里有很多東西可以專研,所以在這里也總結(jié)一下這種形式的閉包。

解釋前先看看

首先這種形式的閉包是人為的加上去,并不是說可以有什么神奇的 duangduang 的特效,而是可以避免很多本來是局部變量可以搞定的比較 low 的變量去污染全局的變量

其次在js中,是 沒有塊作用域 這種說法
首先我們回到C++,如果有一段代碼是這樣

    int number1=10;
    if(true){
      int number1 = 5;
    }
    cout<

這里的結(jié)果還是 10

而在js代碼之中

    var str1= "web";
    if(true){
        var str1="前端";
    };
    console.log(str1);

這里的結(jié)果就是 前端

因?yàn)?if{} 沒有塊作用域,所以內(nèi)部的str1直接就重定義了外部全局的str1,所以輸出的結(jié)果就只是"前端"了,而且這也污染了全局變量(那個等于"web"的str1已經(jīng)不見了蹤影)

而大 js 只有 函數(shù)作用域

所以我們要利用函數(shù)閉包

利用函數(shù)閉包能有效的封裝局部的變量,而不污染全局作用域

    str1 = "web";
    (function () {
         var str1 = "前端";

         //str1剩下的功能
    )();
    console.log(str1);

此時輸出的還是 web

所以我們利用了一個匿名函數(shù) function(){} 并且讓他自己調(diào)用自己執(zhí)行函數(shù)內(nèi)部的操作 并且 str1 也沒有污染到外部的全局作用域

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80595.html

相關(guān)文章

  • 一道面試題談?wù)?/em>函數(shù)柯里化(Currying)

    摘要:忍者秘籍一書中,對于柯里化的定義如下在一個函數(shù)中首先填充幾個參數(shù)然后再返回一個新函數(shù)的技術(shù)稱為柯里化。回到我們的題目本身,其實(shí)根據(jù)測試用例我們可以發(fā)現(xiàn),函數(shù)的要求就是接受單一函數(shù),例如但是與柯里化不同之處在于,柯里化返回的一個新函數(shù)。   歡迎大家再一次來到我的文章專欄:從面試題中我們能學(xué)到什么,各位同行小伙伴是否已經(jīng)開始了悠閑的春節(jié)假期呢?在這里提前祝大家雞年大吉吧~哈哈,之前有人說...

    cppprimer 評論0 收藏0
  • 我遇到的前端面試題2017

    摘要:箭頭函數(shù)與傳統(tǒng)函數(shù)的區(qū)別,主要集中在以下方面沒有和綁定,這些值由最近一層非箭頭函數(shù)決定。不能通過關(guān)鍵字調(diào)用,所以不能用作構(gòu)造函數(shù),否則程序會拋出錯誤。聲明的全局變量不是全局對象的屬性。 showImg(https://segmentfault.com/img/remote/1460000013229911?w=2402&h=1398); 本文首發(fā)于我的博客:http://blog.du...

    muddyway 評論0 收藏0
  • 我遇到的前端面試題2017

    摘要:箭頭函數(shù)與傳統(tǒng)函數(shù)的區(qū)別,主要集中在以下方面沒有和綁定,這些值由最近一層非箭頭函數(shù)決定。不能通過關(guān)鍵字調(diào)用,所以不能用作構(gòu)造函數(shù),否則程序會拋出錯誤。聲明的全局變量不是全局對象的屬性。 showImg(https://segmentfault.com/img/remote/1460000013229911?w=2402&h=1398); 本文首發(fā)于我的博客:http://blog.du...

    Lucky_Boy 評論0 收藏0
  • 我遇到的前端面試題2017

    摘要:箭頭函數(shù)與傳統(tǒng)函數(shù)的區(qū)別,主要集中在以下方面沒有和綁定,這些值由最近一層非箭頭函數(shù)決定。不能通過關(guān)鍵字調(diào)用,所以不能用作構(gòu)造函數(shù),否則程序會拋出錯誤。聲明的全局變量不是全局對象的屬性。 showImg(https://segmentfault.com/img/remote/1460000013229911?w=2402&h=1398); 本文首發(fā)于我的博客:http://blog.du...

    forrest23 評論0 收藏0
  • 前端面試題大集合:來自真實(shí)大廠的532道面試題(只有題,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    Kerr1Gan 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<