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

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

如何根據范圍/閉包更新結構化的JavaScript變量?

如何根據范圍/閉包更新結構化的JavaScript變量?

幕布斯6054654 2019-04-25 18:15:42
下面的代碼是一個destructured 計數變量和increaseCount更新程序函數。如何在執行increaseCount函數時更新count變量的值?這甚至可能嗎?注意:我不希望count變量是全局變量。從下面的代碼我嘗試使用Closures來解決問題。但即使在第二個console.log之后仍然顯示1。function getCount() {     let _count = 1;     const _updateCount = () => {         _count = _count + 1;     };     return [_count, _updateCount];}const [count, updateCount] = getCount();console.log(count); /*      <===== Expect initial count to be 1 */updateCount();console.log(count); /* <===== After calling updateCount I Expect count to be 2 */調用第一個console.log時,我期望count為1。當調用updateCount時,我希望count變量更新為2。因此,當調用第二個console.log時,我希望顯示2。
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

鑒于您當前的代碼,如果您希望能夠getCount多次調用它是不可能的- 您count在最高級別進行了解構,一個原語。改變它的唯一方法是重新分配外部變量getCount,這是一個壞主意。


一個簡單的解決方法是不將一個原語放在數組的第一個位置,而是使用一個返回內部的函數_count:


function getCount() {

    let _count = 1;


    const _updateCount = () => {

        _count = _count + 1;

    };


    return [() => _count, _updateCount];



}


const [getInternalCount, updateCount] = getCount();



console.log(getInternalCount()); /* <===== Expect initial count to be 1 */


updateCount();


console.log(getInternalCount()); /* <===== After calling updateCount I Expect count to be 2 */


查看完整回答
反對 回復 2019-05-17
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

您可以使用具有已實現toString方法的obect,并在原始期望環境中使用此變量來獲取計數。


function getCount() {

    let _count = 1;

    const _updateCount = () => {

        _count = _count + 1;

    };

    return [{ toString: () => _count }, _updateCount];

}


const [count, updateCount] = getCount();

console.log(count + '');

updateCount();

console.log(count + '');


查看完整回答
反對 回復 2019-05-17
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

范圍_count不同于count您嘗試的范圍console.log


要顯示_count您必須使用函數訪問它的值,如下所示:


function getCount() {

  // This is visibile only to the function getCount

  let _count = 1;


  const _updateCount = () => {

    _count = _count + 1;

  };


  const _showCount = () => {

    console.log(_count);

  }


  return [_count, _updateCount, _showCount];

}


// Count here will be a different variable

const [count, updateCount, showCount] = getCount();



console.log(count); /* <===== Expect initial count to be 1 */


updateCount();

showCount(); // Will show ===> 2


updateCount();

showCount(); // Will show ===> 3


查看完整回答
反對 回復 2019-05-17
  • 3 回答
  • 0 關注
  • 454 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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