技术解析

js 如何深拷贝一个函数?
0
2021-08-18 00:42:10
idczone

前几天一个面试中的问题,听到有点懵逼,因为从没听说过这种需求,这几天搜索了一通好像也没有明确的方案,自己能想到的是用 bind ? v 友有点子吗?


拷贝一个函数?? 没了解过 占个座, 等楼下答复, 到时候来学习一下- -

附楼问一下:如何序列化和反序列化一个函数?

函数的作用域不是独立的吗?除了个 ththis 指向的坑有时候需要 bind,拷贝的意义是什么?费解


```javascript
const foo = x => x + 1
eval(foo.toString())(1)
```

为啥要 copy 一个函数 莫非 javascript 的函数是可变的?

https://stackoverflow.com/questions/1833588/javascript-clone-a-function
另外,怎么算函数? 普通函数 函数表达式 箭头函数 , typeof class 也返回 function 算不算函数?
很好奇什么情况下才会需要这种功能.

从函数式编程的角度来看 javascript 里面函数都尽量是纯函数 有一个就行了 其他地方都是他的引用啊
求大神解释

不可能的,闭包是完全没办法克隆的

1. hook javascript functions
2. utilize/modify VM internals

eval 吗

笔记里的
```
function cloneFunction(func) {
const bodyReg = /(?<={)(.|\n)+(?=})/m
const paramReg = /(?<=\().+(?=\)\s+{)/
const funcString = func.toString()
if (func.prototype) {
const param = paramReg.exec(funcString)
const body = bodyReg.exec(funcString)
if (body) {
if (param) {
const paramArr = param[0].split(',')
return new Function(...paramArr, body[0])
} else {
return new Function(body[0])
}
} else {
return null
}
} else {
return eval(funcString)
}
}
```

ctrl c,ctrl v,深拷贝

感觉写一个深拷贝的函数会比较现实,

不知道楼主是不是听错了,如果是真的话,问这种问题的人很明显连基本的编程语言常识都不懂

是不是如何实现深拷贝函数吧?

我当时问了一句“深拷贝一个函数?”,说是的。。面试官水平应该没问题的,之前也问了许多正常的问题。不过后悔没追问他这种需求的场景
我也是这么想的
当时还真没想这么多

看了一下 好像上面的 eval(func.toString)是可以的

面试者的原话说的是什么,直接问的如何深拷贝函数吗.
我猜可能是想问如何继承构造函数?

拷贝对象吧 拷贝个
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服