1 
                    
                    amber0317      2021-12-08 13:08:17 +08:00 via Android 
                    
                    f.bind(null) 
                 | 
            
     2 
                    
                    noe132      2021-12-08 13:17:41 +08:00 via Android 
                    
                    复制不了的。我给你个引用了闭包的函数,你能复制一样的东西吗? 
                 | 
            
     3 
                    
                    DrakeXiang      2021-12-08 13:25:36 +08:00 
                    
                    函数也是对象啊,不过他的提示可能就是 bind/call/apply 这种吧 
                 | 
            
     4 
                    
                    Mutoo      2021-12-08 13:27:36 +08:00 
                    
                    思路: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;  | 
            
     5 
                    
                    robinlovemaggie      2021-12-08 13:28:50 +08:00 
                    
                    => 算不算? 
                 | 
            
     6 
                    
                    maichael      2021-12-08 13:29:22 +08:00 
                    
                    同楼上,bind 、apply 。 
                 | 
            
     7 
                    
                    vision1900      2021-12-08 13:45:23 +08:00 
                    
                    
                 | 
            
     8 
                    
                    vision1900      2021-12-08 13:50:03 +08:00 
                    
                    @vision1900 但我感觉如果用 bind 不设置 this 的话,好像没有任何实际意义 
                 | 
            
     9 
                    
                    waiaan      2021-12-08 14:05:48 +08:00 
                    
                    不是直接赋值给一个变量就行了?复制函数是什么意思? 
                 | 
            
     10 
                    
                    bzw875      2021-12-08 14:09:27 +08:00 via iPhone 
                    
                    面试官问的不好 
                 | 
            
     11 
                    
                    misdake      2021-12-08 14:11:58 +08:00 
                    
                    b = a.bind(null) 和 b = a 相比,除了判断相等的结果不一样之外还有别的区别吗 
                 | 
            
     12 
                    
                    vanton      2021-12-08 14:13:26 +08:00 
                    
                    嗯? 
                为啥那么复杂,很简单的处理下就好了。 ``` /** 原始函数 */ 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(); ```  | 
            
     13 
                    
                    secondwtq      2021-12-08 14:13:37 +08:00 
                    
                    函数不需要复制啊,一个东西需要区分“复制”和“引用”,是因为这东西可以修改,或者需要管理内存。函数没法修改,内存管理 JS 帮你干了,就不需要复制了。 
                 | 
            
     14 
                    
                    jtwor      2021-12-08 14:14:42 +08:00 
                    
                    感觉是想问深拷贝与浅拷贝,js 所有都是对象,能复制的。。 
                 | 
            
     15 
                    
                    Kasumi20      2021-12-08 14:15:03 +08:00 
                    
                    函数的本质就是提高可复用性,降低代码复杂度,你复制函数有什么意义? 
                 | 
            
     16 
                    
                    Geo200      2021-12-08 14:16:15 +08:00 
                    
                    为什么面试要问那么奇怪的问题?真实的业务场景里真的会用到吗 
                 | 
            
     17 
                    
                    Kasumi20      2021-12-08 14:17:13 +08:00 
                    
                    我能想到的唯一的用途是对类的成员函数进行 Hook 
                 | 
            
     18 
                    
                    GuuJiang      2021-12-08 14:17:36 +08:00 
                    
                    ctrl+c/ctrl+v (狗头 
                能问出这种问题,要么是你曲解了面试官的意思,要么面试官是个煞笔  | 
            
     19 
                    
                    violetlai      2021-12-08 14:18:18 +08:00 
                    
                    问的太笼统太不严谨了, 你能想到 n 种环境下 n 种解法。 
                但是面试官只会假定一种环境 ,不给你设定前提,那就是面试官的问题了。 就像问你 css 盒子水平居中有几种方法,但是不给你说是否有父级,父级宽高是不是固定等等假定的条件,你总不可能每种都给他写出来吧  | 
            
     20 
                    
                    jones2000      2021-12-08 14:31:14 +08:00 
                    
                    直接编译这个函数, 生成这个函数的 AST (抽象语法树),这个就可以了。 如果要执行这个函数, 直接执行这个 AST 就可以了。 
                 | 
            
     21 
                    
                    IT1024      2021-12-08 14:51:09 +08:00 
                    
                    楼上的方法刚试了两都可以,但面试官 “提示说你能想到的返回函数的 API 有啥” 这我也懵,有哪位前端大妞解释下不? 
                 | 
            
     22 
                    
                    tousfun      2021-12-08 15:02:51 +08:00 via iPhone 
                    
                    所以 H5 到底指什么 不懂 
                 | 
            
     23 
                    
                    llb123      2021-12-08 15:56:56 +08:00 
                    
                    eval? 
                 | 
            
     24 
                    
                    serge001      2021-12-08 16:29:22 +08:00 
                    
                    这是什么神仙公司问出来的问题 
                 | 
            
     25 
                    
                    C02TobNClov1Dz56      2021-12-08 16:54:09 +08:00 
                    
                    @919615766 小程序? 混合模式 app? 新型框架的网页? 快应用? 网页游戏? 
                这些都算 H5  | 
            
     26 
                    
                    Austaras      2021-12-08 17:01:40 +08:00 
                    
                    楼上都在说啥呢 Object.assign 就行了 
                 | 
            
     28 
                    
                    Jooooooooo      2021-12-08 18:58:37 +08:00 
                    
                    啥叫复制函数...场景是啥? 
                 | 
            
     29 
                    
                    yaphets666      2021-12-08 22:52:05 +08:00 
                    
                    喜欢拿 h5 指代 web 或者移动端 web 的都是老一辈前端 /非专业前端了,找工作嘛,别太锋芒毕露,心里吐槽下就行了。容忍菜鸟同事和领导也是工作的一部分,大家都不容易。 
                 |