Вот загрузка sh исходный код :
function cloneBuffer(buffer, isDeep) {
if (isDeep) {
return buffer.slice()
}
const length = buffer.length
const result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length)
buffer.copy(result)
return result
}
Как мы видим, если флаг isDeep
равен true
, cloneBuffer
, используйте функцию buffer.slice()
для копирования в буфер.
Но в соответствии с документами среза Node.js:
Возвращает новый буфер, который ссылается на ту же память, что и оригинал
https://nodejs.org/docs/latest-v13.x/api/buffer.html#buffer_buf_slice_start_end
И Buffers and TypedArrays
документы:
Пока TypedArray # slice () создает копию части TypedArray, Buffer # slice () создает представление над существующим буфером без копирования.
https://nodejs.org/docs/latest-v13.x/api/buffer.html#buffer_buffers_and_typedarrays
Как говорится, Buffer.slice
просто создает просмотр существующего буфера и без копирования .
, так почему loda sh использует его для выполнения операции cloneDeep?