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

    我的方法: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   ·   实用小工具   ·   2621 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:26 · PVG 23:26 · LAX 07:26 · JFK 10:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.