0

我正在执行此操作。

//to_s.js
(function(){
String.prototype.to_s = function(){
        var str = this.toString();
        var convert = function(s){
            return eval(s);
        };

        while(/#{(\w+)}/.test(str)){

            // bad  because I use eval...

            var matchStr =RegExp.$1;

            var str = str.replace(/#{(\w+)}/,convert(matchStr));

        }
        return str;
    };
})();

module.exports = String.prototype.to_s;


// test/to_s_test.js

require("./../to_s");

var name = 33;

"hello #{name}".to_s();

我运行 to_s_test.js,但它发生了“名称未定义”的错误。但我不知道为什么会发生。但是将 'var name = 33' 更改为 name = 33 ,它可以工作......你有什么想法? 提前致谢。

4

1 回答 1

2

它只会在没有的情况下起作用,var因为它eval发生在另一个上下文中,因此只能使用您的方法访问全局变量。不声明变量时会自动创建一个全局变量;然而,在 node.js 中,模块中声明的变量不是全局的。

这就是为什么,正如我之前提到的,试图使语言符合其他语言的习语是一个坏主意

于 2012-08-09T01:35:54.617 回答