面试的时候面试官问如何复制数组、对象,我巴拉巴拉说,说完突然问我那如何复制一个函数呢?
我瞬间闷逼了,能想到的原型链上下手,但是似乎也不是什么好的解法,面试官提示说你能想到的返回函数的 API 有啥,我就更闷逼了。
迷惑人的一天。
我瞬间闷逼了,能想到的原型链上下手,但是似乎也不是什么好的解法,面试官提示说你能想到的返回函数的 API 有啥,我就更闷逼了。
迷惑人的一天。
|
amber0317Dec 8, 2021 via Android
1
f.bind(null)
|
|
noe132Dec 8, 2021 via Android
2
复制不了的。我给你个引用了闭包的函数,你能复制一样的东西吗?
|
|
DrakeXiangDec 8, 2021
3
函数也是对象啊,不过他的提示可能就是 bind/call/apply 这种吧
|
|
MutooDec 8, 2021
4
思路:function.toString() 可以拿到函数的字面量,然后用正则解析出参数和函数 body ,调用 new Function() 就可以复制函数了。当然这种方式只能复制一些纯函数,对闭包或者其它有 Side Effect 的函数不灵。
fn_a = function(x,y){return x+y;}; fn_a.toString() > "function(x,y){return x+y;}" fn_b = (x, y) => x+y; fn_b.toString() > (x, y)=>x+y; |
|
robinlovemaggieDec 8, 2021
5
=> 算不算?
|
|
maichaelDec 8, 2021
6
同楼上,bind 、apply 。
|
|
vision1900Dec 8, 2021
7
|
|
vision1900Dec 8, 2021
8
@vision1900 但我感觉如果用 bind 不设置 this 的话,好像没有任何实际意义
|
|
waiaanDec 8, 2021
9
不是直接赋值给一个变量就行了?复制函数是什么意思?
|
|
bzw875Dec 8, 2021 via iPhone
10
面试官问的不好
|
|
misdakeDec 8, 2021
11
b = a.bind(null) 和 b = a 相比,除了判断相等的结果不一样之外还有别的区别吗
|
|
vantonDec 8, 2021
12
嗯?
为啥那么复杂,很简单的处理下就好了。 ``` /** 原始函数 */ function f1() { var n = 999; nAdd = function () { n += 1; }; function f2() { alert(n); } return f2; } /** 复制?? */ function a(x) { return x; } /** 复制原始函数到 f3 */ var f3 = a(f1); console.log(f3); f3(); ``` |
|
secondwtqDec 8, 2021
13
函数不需要复制啊,一个东西需要区分“复制”和“引用”,是因为这东西可以修改,或者需要管理内存。函数没法修改,内存管理 JS 帮你干了,就不需要复制了。
|
|
jtworDec 8, 2021
14
感觉是想问深拷贝与浅拷贝,js 所有都是对象,能复制的。。
|
|
Kasumi20Dec 8, 2021
15
函数的本质就是提高可复用性,降低代码复杂度,你复制函数有什么意义?
|
|
Geo200Dec 8, 2021
16
为什么面试要问那么奇怪的问题?真实的业务场景里真的会用到吗
|
|
Kasumi20Dec 8, 2021
17
我能想到的唯一的用途是对类的成员函数进行 Hook
|
|
GuuJiangDec 8, 2021
18
ctrl+c/ctrl+v (狗头
能问出这种问题,要么是你曲解了面试官的意思,要么面试官是个煞笔 |
|
rebel28Dec 8, 2021
19
问的太笼统太不严谨了, 你能想到 n 种环境下 n 种解法。
但是面试官只会假定一种环境 ,不给你设定前提,那就是面试官的问题了。 就像问你 css 盒子水平居中有几种方法,但是不给你说是否有父级,父级宽高是不是固定等等假定的条件,你总不可能每种都给他写出来吧 |
|
jones2000Dec 8, 2021
20
直接编译这个函数, 生成这个函数的 AST (抽象语法树),这个就可以了。 如果要执行这个函数, 直接执行这个 AST 就可以了。
|
|
IT1024Dec 8, 2021
21
楼上的方法刚试了两都可以,但面试官 “提示说你能想到的返回函数的 API 有啥” 这我也懵,有哪位前端大妞解释下不?
|
|
tousfunDec 8, 2021 via iPhone
22
所以 H5 到底指什么 不懂
|
|
llb123Dec 8, 2021
23
eval?
|
|
serge001Dec 8, 2021
24
这是什么神仙公司问出来的问题
|
|
C02TobNClov1Dz56Dec 8, 2021
25
@919615766 小程序? 混合模式 app? 新型框架的网页? 快应用? 网页游戏?
这些都算 H5 |
|
AustarasDec 8, 2021
26
楼上都在说啥呢 Object.assign 就行了
|
|
JoooooooooDec 8, 2021
28
啥叫复制函数...场景是啥?
|
|
yaphets666Dec 8, 2021
29
喜欢拿 h5 指代 web 或者移动端 web 的都是老一辈前端 /非专业前端了,找工作嘛,别太锋芒毕露,心里吐槽下就行了。容忍菜鸟同事和领导也是工作的一部分,大家都不容易。
|