资讯专栏INFORMATION COLUMN

node.js之REPL

DevTTL / 552人阅读

摘要:何为读取求值输出循环英语,简称是一个简单的,交互式的编程环境。它提供了一种交互方式,即执行程序,展现结果。它可以被用作,或者只是执行操作得到一些结果。对于,宿主环境最常见的是浏览器。

何为REPL

wiki:

  

“读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL)是一个简单的,交互式的编程环境。

node.js官方文档(v0.12.2):

  

REPL既可以作为独立单机程序,也可以被其他的程序包含在内的程序。

它提供了一种交互方式,即“执行程序,展现结果”。

它可以被用作debuggingtesting 或者只是执行操作得到一些结果。

执行REPL

打开命令行,键入node

$ node
> 

然后就可以当开发环境使了

> var age = 12
undefined
> age
12


> function getAge(){
... console.log(this.age)
... }
undefined

> getAge()
12
undefined

因为REPL环境内部使用eval函数来评估该表达式的执行结果,所以有些东西我们可以直接这样写,如对象:

> {a:1,b:2}
{ a: 1, b: 2 }

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ]
下划线 _

使用_可以指代上一次的操作执行后的值,比如

对象:

> {a:1,b:2,c:3}
{ a: 1, b: 2, c: 3 }

> for(var key in _){
..... console.log("key : " + key + ",value : " + _[key]);
..... }

key : a,value : 1
key : b,value : 2
key : c,value : 3
//这里的_指代的是上一次执行操作后的对象

数组:

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ] 
> Object.keys(_)                        //这里的_指代的时上一次执行的数组
[ "0", "1", "2", "3", "4" ]             //获取index值

注意  下面的值不是我们的预期,因为_指代的已经不是原先的数组了!

> _.map(function(k){return _[k]*_[k]})  
[ 0, 1, 4, 9, 16 ]                      //获取元素值

正确的结果:

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ]                       //数组
> Object.keys(_).map(function(k){return _[k]*_[k]})
[ 1, 4, 9, 16, 25 ]                     //元素值
内置REPL方法

一些REPL里的方法,通过键入.help可以看到:

> .help
break   Sometimes you get stuck, this gets you out
clear   Alias for .break
exit    Exit the repl
help    Show repl options
load    Load JS from a file into the REPL session
save    Save all evaluated commands in this REPL session to a file
.break & .clear

作用:中断当前的出入
你想退出你当前的输入环境,使用.break 或者 .clear

> function show(){
... console.log("");
... .clear           //.clear 或 .break
> 
.exit

作用:退出REPL ;快捷键:

control + c

直接退出REPL,回到命令行。

.save

将当前REPL中所有会话保存到文件中

> function sum(a,b){
... return a + b;
... }
undefined

> function substract(a,b){
... return a - b;
... }
undefined

> .save calculator.js
Session saved to:calculator.js
.load

加载文件进入到当前的REPL会话。

> .load calculator.js

> function sum(a,b){
... return a + b;
... }
undefined

> function substract(a,b){
... return a - b;
... }
undefined

> sum(3,5)
8

> substract(8,2)
6
最后扯几句
  

一门语言在运行的时候,需要一个环境,叫做宿主环境。对于JavaScript,宿主环境最常见的是web浏览器。

所以这时的this通常指代的时window

而在nodeREPL中,this指代的是global

> this
{ DTRACE_NET_SERVER_CONNECTION: [Function],
  DTRACE_NET_STREAM_END: [Function],
...

> this === global
true

REPL的优势在于:
- 可以debugging
- 做一些testing
- 快速的实践执行操作

done.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91500.html

相关文章

  • JavaScript中的递归

    摘要:第三次第四次设想,如果传入的参数值特别大,那么这个调用栈将会非常之大,最终可能超出调用栈的缓存大小而崩溃导致程序执行失败。注意尾递归不一定会将你的代码执行速度提高相反,可能会变慢。 译者按: 程序员应该知道递归,但是你真的知道是怎么回事么? 原文: All About Recursion, PTC, TCO and STC in JavaScript 译者: Fundebug ...

    Jacendfeng 评论0 收藏0
  • node学习系列基础(二)

    摘要:由于这种特性,某一个任务的后续操作,往往采用回调函数的形式进行定义。另外,回调函数本身的第一个参数,约定为上一步传入的错误对象。这种写法有一个很大的好处,就是说只要判断回调函数的第一个参数,就知道有没有出错,如果不是,就肯定出错了。 REPL环境 在命令行键入node命令,后面没有文件名,就进入一个Node.js的REPL环境(Read–eval–print loop,读取-求值-输出...

    zhaot 评论0 收藏0
  • JavaScript进阶’this‘

    摘要:所以相同点是,在全局范围内,全局变量终究是属于老大的。只生效一次引入了。只生效一次在箭头函数中,与封闭词法环境的保持一致。我通常把这些原始函数叫做构造函数。在里面你可以嵌套函数,也就是你可以在函数里面定义函数。 showImg(https://img-blog.csdnimg.cn/20190522000008399.jpg?x-oss-process=image/watermark,...

    shenhualong 评论0 收藏0
  • 使用nodejs自带debug工具调试nodejs

    摘要:示例代码插入断点方法在需要设置断点的地方插入关键字,程序会在这里暂停运行。只需要在命令模式输入,按回车便可以进入环境。 1 示例代码 app.js var express = require(express); var app = express(); var req_times = 0; app.all(/*, function(req, res){ req_times...

    he_xd 评论0 收藏0
  • js中this的“终极三问”

    摘要:是什么本质是一个绑定,在函数被调用时建立。它的指向是完全由函数被调用的调用点来决定的。因为函数的调用点在全局作用域,所以指向全局变量这里就是函数的调用点存在的意义在函数体内部指代函数当前的运行环境。从而实现干净的设计和更容易的复用。 this是什么? this 本质是一个绑定, 在函数被调用时建立。它的指向是完全由函数被调用的调用点来决定的。 function baz() { ...

    silvertheo 评论0 收藏0

发表评论

0条评论

DevTTL

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<