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 年 4 月 11 日 · 6371 次点击
    这是一个创建于 2846 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    25 条回复    2018-04-15 14:01:28 +08:00
    Mutoo
        1
    Mutoo  
       2018 年 4 月 11 日   ❤️ 3
    VeryVeryLongFunctionNameThatEvenCantBeGuessedByAnyotherDevelopers = function() {}
    chenset
        2
    chenset  
       2018 年 4 月 11 日   ❤️ 1
    ```
    (function(){
    function ff(){

    }
    })();
    ```
    rekulas
        3
    rekulas  
       2018 年 4 月 11 日
    1523417455567 时间戳

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

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

    楼主你确定这个问题的范畴和 JS 函数有关?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   839 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:14 · PVG 06:14 · LAX 14:14 · JFK 17:14
    ♥ Do have faith in what you're doing.