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

資訊專欄INFORMATION COLUMN

每日一面——仿寫reverse方法

未東興 / 2855人閱讀

摘要:引言今天小問了我一個面試題,怎么實現一個實方法,在實現的過程中我還是犯了一些錯,實現完以后,對一些知識點的理解又加深了。此時還是在上,并且至少在當前的方法中不會再被改變了,因為沒有哪個指針能指向它了。

引言

今天小K問了我一個面試題,怎么實現一個實reverse方法,在實現的過程中我還是犯了一些錯,實現完以后,對一些知識點的理解又加深了。

錯誤的寫法

最開始我是這么寫的

var arr = [1,2,3,4,5]
    var reverse1 = function (arr) {
      let newArr = []
      while (arr.length>0){
        newArr.push(arr.pop())
      }
      console.log(arr,newArr) // [],[5,4,3,2,1]
      arr = newArr //讓arr等于反轉后的新數組
      console.log(arr) // [5,4,3,2,1]
      return arr
    }
    reverse1(arr)

結果有點打臉

console.log(arr) // []
函數參數的傳遞方式

上面的現象顯示:我將arr當參數傳入reverse1里面,我可以改變arr里面的內容但是我卻無法改變arr(arr由[1,2,3,4,5]pop()五次變成[ ],但是隨后的賦值操作卻沒有成功)
為什么會出現這個問題,我們得從函數的參數傳遞方式說起

函數的參數都是值傳遞

怎么理解這句話,按照高程的說法,如果這里是引用傳遞,那么我在代碼第8行已經讓arr變成了[5,4,3,2,1],那么外面的arr也應該變,但是現在外面arr卻是[ ],所以函數的參數的傳遞方法都是值傳遞

如果你覺得這么說還是比較抽象,你可以聽聽鄙人陋見,我們完全可以把js里面數組名當成一個指針變量,儲存的是實際的數組對象的地址。指針意味著我們通過它可以訪問它指向的對象。變量意味者我可以改變這個變量。

在函數參數里面當我們傳入一個arr的時候,實際傳遞的是一個形參address1,儲存arr這個對象在內存里的地址,address1=xxxx xxxxx xxxx xxx1。通過address1可以對arr進行任何操作,一旦現在我為address1賦上新的地址值,也就是address1=xxxx xxxxx xxxx xxx2。address1就和arr失去了聯系。此時arr還是在xxxx xxxxx xxxx xxx1上,并且至少在當前的reverse1方法中不會再被改變了,因為沒有哪個指針能指向它了。

正確的寫法

ok說了這么多,實際想說的是,你在方法中可以通過索引,通過原生方法操作一個當參數傳進來的數組,但是絕對不允許對數組名直接進行賦值
那么這個題目我們就可以嘗試使用原生方法來操作傳進來的數組,這里提供一種思路

var arr = [1,2,3,4,5]
var reverse1 = function () {
      for(var i = 0; i < arr.length; i ++){
        arr.splice(i,0,arr.pop())
      }
    }
reverse1(arr)
console.log(arr) // [5,4,3,2,1]

但是我們可以看到上面的方法還是不是很好,這是因為這個reverse1貌似只能對arr進行操作,耦合性太強,我們需要解耦,讓reverse1對所有的數組都適用,這里適用this和原型方面的知識

//一個完美的寫法:
Array.prototype.reverse1 = function () {
      for(var i = 0; i < this.length; i ++){ //this 解耦
        this.splice(i,0,this.pop())
      }
      return this
    }
總結

今天介紹了一下reverse的實現思路,this解耦,以及函數參數是值傳遞這么一個概念,
建議在方法中通過索引,通過原生方法改變一個當參數傳進來的數組,但是絕對不允許對數組名直接進行賦值
希望對大家有所幫助。

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

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

相關文章

  • 每日一面——深入理解reduce方法

    摘要:引言有一段時間沒更新了,最近挺忙的懶病犯了。例數組累加例計算總價蘋果桃子西瓜自己實現一個方法知道了的兩種模式利用遞歸實現它并不復雜參數有個。數據從這些方法組成的管道中流淌一遍出來就得到想要的結果了。 showImg(https://segmentfault.com/img/bVbuHVn?w=598&h=419); 引言 有一段時間沒更新了,最近挺忙的(懶病犯了)。今天偶然想到之前去去...

    Paul_King 評論0 收藏0
  • 每日一道算法題 - 反轉字符串(easy-3)

    摘要:規則使用語言,讓函數獲取傳遞的參數,并以相反的順序返回字符串。測試用例思路方法通過把字符串轉換成數組,并使用數組的反轉數組,然后使用重新拼接成字符串方法向后循環字符串或字符數組以生成新字符串 雖然都是很簡單的算法,每個都只需5分鐘左右,但寫起來總會遇到不同的小問題,希望大家能跟我一起每天進步一點點。更多的小算法練習,可以查看我的文章。 規則 Using the JavaScript l...

    xfee 評論0 收藏0
  • LeetCode每日一題: 旋轉數組(No.189)

    摘要:題目旋轉數組給定一個數組,將數組中的元素向右移動個位置,其中是非負數。例如將到反轉將到反轉全部翻轉得到最后結果。這里要注意下還有這樣的情況即大于數組長度的情況。次旋轉次旋轉轉回來了次旋轉次旋轉轉回來了次旋轉所以這里的有效等于對數組長度求余。 題目: 旋轉數組 給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。 示例: 輸入: [1,2,3,4,5,6,7] 和 k...

    FreeZinG 評論0 收藏0
  • 前端每日實戰:149# 視頻演示如何用純 CSS 創作一個寶路薄荷糖的動畫

    摘要:可交互視頻此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。源代碼下載每日前端實戰系列的全部源代碼請從下載代碼解讀定義,只有個元素居中顯示定義容器尺寸用偽元素畫出個像寶路薄荷糖狀的黑色圓環接下來制作動畫效果。 showImg(https://segmentfault.com/img/bVbhIKv?w=400&h=300); 效果預覽 按下右側的點擊預覽按鈕可以在當前頁面預覽,...

    SolomonXie 評論0 收藏0

發表評論

0條評論

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