zoukankan      html  css  js  c++  java
  • node.js的全局变量的注意

    在node.js中,如果一个变量没有用var来声明,就会变为全局变量:

    看如下代码:

    1)6.js

    function myadd(a)
    {
        return a+abc;
    }
    
    
    function contains(a,b)
    {
        return a.indexOf(b)>-1;
    }
    
    function charToNumber(char)
    {
        return char.charCodeAt(0)-96;
    }
    
    function stringToOrdinal(str)
    {
        var result="";
        for(var i=0,len=str.length;i<len;i++)
        {
            result+=charToNumber(str[i]);
        }
    
        return result;
    }
    
    module.exports={
    
        myadd:myadd,
        contains:contains,
        stringToOrdinal:stringToOrdinal
    }

    再看:7.js

    abc=3;
    var six=require('./6');
    console.log(six.myadd(3));

    输出为:

    6

    因为,这里的abc是全局变量了。

    修改为:

    var abc=3;
    var six=require('./6');
    console.log(six.myadd(3));

    然后运行7.js:

    D:wcf16.js:3
        return a+abc;
                 ^
    
    ReferenceError: abc is not defined
        at Object.myadd (D:wcf16.js:3:11)
        at Object.<anonymous> (D:wcf17.js:3:17)
        at Module._compile (module.js:570:32)
        at Object.Module._extensions..js (module.js:579:10)
        at Module.load (module.js:487:32)
        at tryModuleLoad (module.js:446:12)
        at Function.Module._load (module.js:438:3)
        at Module.runMain (module.js:604:10)
        at run (bootstrap_node.js:389:7)
        at startup (bootstrap_node.js:149:9)
    [Finished in 0.5s]

    这就出错了。

    abc=3;
    var six=require('./6');
    console.log(six.myadd(3));
    
    function myadd1(a)
    {
        return a+abc1;
    }
    
    abc1=3;
    console.log(myadd1(3));

    则ok。

    生命为;var abc1=3;也是如此。

  • 相关阅读:
    Tinkoff Challenge
    Uva 12298 超级扑克2
    BZOJ 1031 字符加密
    HDU 4944 逆序数对
    51nod 1215 数组的宽度
    LA 3126 出租车
    LA 3415 保守的老师
    51nod 1275 连续子段的差异
    Uva 11419 我是SAM
    LA 4043 最优匹配
  • 原文地址:https://www.cnblogs.com/aomi/p/7417411.html
Copyright © 2011-2022 走看看