亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js閉包的問題

js閉包的問題

嗶嗶one 2019-02-14 18:15:22
<!doctype html><html><head></head><body>    <script type="text/javascript">    <!-- 在正常的腳本中,某個方法可以獲取到外部的變量,或者全局變量 -->    var num = 11;    function func1(){        console.log(num);    }    func1();    <!-- 但是在外部是無法獲取方法內部的局部變量的 -->    function func2(){        var num1 = 22;        num2 = 33;    }    func2();    <!--console.log(num1);  會報錯!-->    console.log(num2); <!--可以獲取到num2的值,因為不適用var定義變量時,默認是全局變量 -->    <!-- 那么如何在外部獲取到內部的變量呢!javascript可以辦到 -->    function func3(){        var num3 = 44;        function func4(){            return num3;        }        return func4;    }    var func = func3();    console.log(func());    </script></body></html>第三個中...為什么不直接return num3呢。。。在外面包一個func4有什么區別。。。。。。不都是返回num3嗎。。求大神解惑。。這各問題把我弄蒙了
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

1、如果你所有的變量都定義在最外層,也就是window環境下,你要想一想,如果程序變得越來越大,你一個不小心就把某一個變量修改了,bug很難定位

2、閉包簡單來說,就是內層函數能夠訪問到作用域鏈上的變量。你的例子太簡單了,如果單單只返回值,怎么返回都沒什么區別,但是如果你是暴露接口方法,使之能操作你函數里面的變量呢?這就又不一樣了,只返回值你永遠不能在外層對這個變量進行修改,相當于把你的變量封裝了起來,外層不能改變他,也就解決了1里的問題

3、如2中所說,你可以


function func3 () {

    var num = 1

    function add () {

        num++

    }

    function getNum () {

        return num

    }

    return {

        add: add,

        getNum: getNum

    }

}

var t = func3()

t.add()

t.getNum()

這樣是不是就封裝了一些操作了,也變得更加有意義呢?例子還是太簡單,只是說明對變量的封裝。


查看完整回答
反對 回復 2019-02-21
  • 1 回答
  • 0 關注
  • 397 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號