亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

JasinYip / 3238人閱讀

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

先來(lái)看一個(gè)問(wèn)題 題目
var str1 = str2 = "web";
(function () {
var str1 = str2 = "前端";
})();
console.log(str2);

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

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

解答

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

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

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

腦洞大開(kāi)

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

(function(){
})()

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

解釋前先看看

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

其次在js中,是 沒(méi)有塊作用域 這種說(shuō)法
首先我們回到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{} 沒(méi)有塊作用域,所以內(nèi)部的str1直接就重定義了外部全局的str1,所以輸出的結(jié)果就只是"前端"了,而且這也污染了全局變量(那個(gè)等于"web"的str1已經(jīng)不見(jiàn)了蹤影)

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

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

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

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

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

此時(shí)輸出的還是 web

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80595.html

相關(guān)文章

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

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

    cppprimer 評(píng)論0 收藏0
  • 我遇到的前端面試題2017

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

    muddyway 評(píng)論0 收藏0
  • 我遇到的前端面試題2017

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

    Lucky_Boy 評(píng)論0 收藏0
  • 我遇到的前端面試題2017

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

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

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

    Kerr1Gan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<