国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從一個小題目談談js函數閉包

JasinYip / 3199人閱讀

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

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

當然這里輸出的是結果是: 前端

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

解答

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

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

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

腦洞大開

其實每一次看到這種形式的代碼

(function(){
})()

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

解釋前先看看

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

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

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

這里的結果還是 10

而在js代碼之中

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

這里的結果就是 前端

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

而大 js 只有 函數作用域

所以我們要利用函數閉包

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

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

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

此時輸出的還是 web

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80595.html

相關文章

  • 一道面試題談談函數柯里化(Currying)

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

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

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

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

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

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

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

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

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

    Kerr1Gan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<