像浏览器中的控制台一样在本地使用Node,有很多错误

时间:2016-04-18 09:36:44

标签: javascript node.js google-chrome

我正在学习Javascript,我希望与我的程序“互动”,看看我是否正确编写了函数。当我说交互时,我的意思是创建对象,调用递归函数,获取/设置属性等。

当我在Chrome中加载脚本时,我可以在控制台中完成所有这些操作(正常工作)。但是,当我使用Node在我的Mac上尝试相同的方法时,我会遇到各种奇怪的行为。

代码示例:

"use strict";

// simple recursive function
let countDownFrom = (num) => {
    if (num === 0) return;

    console.log(num)
    countDownFrom(num - 1)
}


// Closures
var createPet = function(name) {
    var sex;

    return {
        setName: function(newName) {
        name = newName;
    },
    getName: function() {
        return name;
    },
    getSex: function() {
        return sex;
    },
    setSex: function(newSex) {
        if(typeof newSex === "string" && (newSex.toLowerCase() === "male" || newSex.toLowerCase() === "female")) {
            sex = newSex;
            }
        }
    }
}

示例1。 在保存我的test.js文件的目录中,我尝试node test.js命令不会向终端打印任何内容,只是移动到新行。

  

js git:master❯node test.js
  js git:master❯

这当然是合乎逻辑的 - 脚本被加载到内存中,它被执行,结果被打印到屏幕上(因为在脚本中没有进行任何函数调用,所以没有任何可见),之后内存被释放(变量被破坏)。很明显,从这里我不能做countdownFrom(10);var pet = createPet("Charlie");

示例2。 当我进入交互模式(REPL)时,我做了一个:

  

要求( './试验')

将空对象{​​{1}}打印到新行上。如果我然后尝试我的{},我会收到以下错误:

  

ReferenceError:未定义countDownFrom       在repl:1:9
      在REPLServer.defaultEval(repl.js:269:27)
      在界(domain.js:287:14)
      在REPLServer.runBound [as eval](domain.js:300:12)
      在REPLServer。 (repl.js:439:12)
      在emitOne(events.js:95:20)
      在REPLServer.emit(events.js:182:7)
      在REPLServer.Interface._onLine(readline.js:211:10)
      在REPLServer.Interface._line(readline.js:550:8)
      在REPLServer.Interface._ttyWrite(readline.js:827:14)

在我看来,Node并没有像浏览器一样加载和“保持”脚本。我希望能够做到这些:

countDownFrom(10);

P.S。我确实尝试将整个test.js加载到像var pet = createPet(/name/); pet.getName(); pet.setSex("female"); // ... etc 这样的变量中,但也没有运气:

  

'> t.createPet( “查理”);
  TypeError:t.createPet不是函数

正确的方法是什么?谢谢!

0 个答案:

没有答案