如何防止 JS 函数重名 ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
wwjvtwoex
V2EX    Javascript

如何防止 JS 函数重名 ?

  •  
  •   wwjvtwoex 2018-04-11 11:16:38 +08:00 6233 次点击
    这是一个创建于 2741 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的方法:const f = function (){}
    还有别的方法吗 ?

    25 条回复    2018-04-15 14:01:28 +08:00
    Mutoo
        1
    Mutoo  
       2018-04-11 11:21:41 +08:00   3
    VeryVeryLOngFunctionNameThatEvenCantBeGuessedByAnyotherDevelopers= function() {}
    chenset
        2
    chenset  
       2018-04-11 11:23:32 +08:00   1
    ```
    (function(){
    function ff(){

    }
    })();
    ```
    rekulas
        3
    rekulas  
       2018-04-11 11:32:29 +08:00
    1523417455567 时间戳

    veryWonderfulFunc1523417455567 = function() {}
    wwjvtwoex
        4
    wwjvtwoex  
    OP
       2018-04-11 11:32:55 +08:00
    @Mutoo 我的意思是,一旦函数重名,编译器能报错,而不是静默地覆盖
    wenzichel
        5
    wenzichel  
       2018-04-11 11:33:27 +08:00   2
    1. 命名空间: 把相关的函数写到一个对象或者类中;
    2. 模块化: 把函数写到一个文件里,然后其他的文件进行 import;
    3. 闭包
    Rhonin
        6
    Rhonin  
       2018-04-11 11:34:18 +08:00
    export function xx () {}
    import { xx } from xxx
    wenzichel
        7
    wenzichel  
       2018-04-11 11:36:38 +08:00
    4. 计数器: 用一个全局变量 counter 来计数,每命名一个函数名,则 counter++;时间戳不太好,如果代码执行的快的话,那时间戳区分不开的
    ```Javascript
    let s = 'ajaxCallback'+ window.counter;
    window.counter++;
    window[s]=(result)=>{
    // callback(result);

    };
    ```
    murmur
        8
    murmur  
       2018-04-11 11:37:14 +08:00
    你都知道了 const 了 以前 es5 之前都在用的避免重名的方法不晓得么
    dcatfly
        9
    dcatfly  
       2018-04-11 12:18:57 +08:00
    eslint 了解一下
    xianxiaobo
        10
    xianxiaobo  
       2018-04-11 12:22:11 +08:00
    第一个函数名用 1,第二个用 2,第三个用 3,怎么会重名呢?
    jiangzhuo
        11
    jiangzhuo  
       2018-04-11 12:41:03 +08:00
    不用使用函数名,所有调用此函数的地方都写个一模一样的函数
    chenalex
        12
    chenalex  
       2018-04-11 13:27:31 +08:00
    "use strict"; 函数放对象里面调用,严格模式对象字面量重复属性名报错
    graysheeep
        13
    graysheeep  
       2018-04-11 13:47:31 +08:00
    1、eslint
    2、模块化
    faceRollingKB
        14
    faceRollingKB  
       2018-04-11 14:53:16 +08:00
    js 本身是动态语言,通常只有运行时才会报错
    所以你的需求应该是:有没有一款 IDE,可以在 js 代码运行之前就把运行时错误找报出来?
    SourceMan
        15
    SourceMan  
       2018-04-11 15:07:05 +08:00
    模块化
    闭包
    wotemelon
        16
    wotemelon  
       2018-04-11 15:08:30 +08:00
    @faceRollingKB eslint 了解一下
    iRiven
        17
    iRiven  
       2018-04-11 15:12:29 +08:00 via Android
    匿名函数,全程不需要命名
    vevlins
        18
    vevlins  
       2018-04-11 15:14:20 +08:00
    这个问题听起来很奇怪
    otakustay
        19
    otakustay  
       2018-04-11 15:56:51 +08:00
    咱们……直接……用……模块化……不就……好……了……吗……
    fortunezhang
        20
    fortunezhang  
       2018-04-11 16:11:19 +08:00
    我来一个,当时接了一个私活,是用 web 做报表。好多个页面;每个页面有 n 个弹窗,弹窗上,继续弹窗。好多功能类似。 然后我就是 function page_1_some_function(){} ,后来还被他们使用。
    h1367500190
        21
    h1367500190  
       2018-04-11 16:15:57 +08:00   1
    @otakustay 感觉他之所以遇到这个问题就是因为没有模块化。。。
    xiaxiaokang
        22
    xiaxiaokang  
       2018-04-11 16:34:25 +08:00
    能问出这问题多半还是初学!
    faceRollingKB
        23
    faceRollingKB  
       2018-04-11 17:04:51 +08:00   1
    @wotemelon @wwjvtwoex
    看了下介绍,eslint 可以自定义一些规则,并在运行代码前根据这些规则去检查代码,确实可以解决很多常见的语法错误;
    此外,如果对自己的编码水平有自信的话,也可以使用一些编码规范避免变量名重复这种问题,比如不要把变量名暴露到全局,尽可能保持在模块内,如果要暴露到全局的话需要限制命名空间,类似的
    lozzow
        24
    lozzow  
       2018-04-11 18:17:01 +08:00 via Android
    @rekulas 哈哈哈,我也是这么想的,哈哈哈
    tommyZZM
        25
    tommyZZM  
       2018-04-15 14:01:28 +08:00
    有什么语言不会遇到这个(变量 /函数 /等字面量重名)问题?

    楼主你确定这个问题的范畴和 JS 函数有关?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2737 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:43 PVG 22:43 LAX 07:43 JFK 10:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86