Platform
Resources
Pricing
Sign in
Get started
深度碎片
as simple as possible
Workspace
Fork
Published
Observable tutorials
By
深度碎片
Edited
Nov 6, 2019
Fork of
Hello and Welcome!
Observable tutorials
File Attachments
Slide
Views are Mutable Values
Generator Cells, Functions and Objects
Custom Generators
Notebook Visualizer
Hello and Welcome!
Synchronized Views
Introduction to Promises
Introduction to Views
Introduction to HTML
Introduction to Data
Introduction to Generators
Downloading and Embedding Notebooks
(2nd) Tutorial 1: Lunch calculator
(0th) Observable: The User Manual
(1st) Five-Minute Introduction
Insert cell
Insert cell
Insert cell
answer
=
2
*
3
*
7
Insert cell
Insert cell
create_obj_inspect
=
(
{
"subjects"
:
[
"life"
,
"the universe"
,
"everything"
]
}
)
Insert cell
Insert cell
block_statement_arrowFunc_oneMoreReturns
=
{
let
sum
=
0
;
for
(
let
i
=
1
;
i
<=
10
;
++
i
)
sum
+=
i
;
return
sum
;
}
Insert cell
Insert cell
{
let
sum
=
0
;
for
(
let
i
=
1
;
i
<=
10
;
++
i
)
sum
+=
i
;
// return sum;
}
Insert cell
Insert cell
42
,
// Oops, a SyntaxError!
Insert cell
Insert cell
Insert cell
raw_html
=
document
.
createTextNode
(
"Hello, I am text!"
)
Insert cell
Insert cell
html
`Hello, I am <i>italicized</i>!`
Insert cell
Insert cell
md
`Hello, I am *Markdown*!`
Insert cell
Insert cell
create_svg
=
html
`<svg width=50 height=50>
<circle cx=25 cy=25 r=20 fill=red></circle>
</svg>`
Insert cell
Insert cell
create_raw_canvas
=
{
const
canvas
=
document
.
createElement
(
"canvas"
)
;
canvas
.
width
=
50
;
canvas
.
height
=
50
;
const
context
=
canvas
.
getContext
(
"2d"
)
;
context
.
arc
(
25
,
25
,
20
,
0
,
2
*
Math
.
PI
)
;
context
.
fillStyle
=
"blue"
;
context
.
fill
(
)
;
return
canvas
;
}
Insert cell
Insert cell
Insert cell
Insert cell
x
=
2
Insert cell
y
=
5
Insert cell
Insert cell
x
+
y
Insert cell
Insert cell
{
const
x
=
1337
;
// This defines a local x, masking the cell above.
return
x
;
}
Insert cell
Insert cell
z
*
z
Insert cell
Insert cell
z
=
8
Insert cell
Insert cell
doop
=
1
Insert cell
doop
=
2
// doop is not a unique name! 💥
Insert cell
doop
+
1
// doop is not defined 💥
Insert cell
Insert cell
a
=
b
+
1
// a depends on b
Insert cell
b
=
a
+
1
// b depends on a 💥
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
function
k
(
x
,
y
)
{
return
x
/
y
;
}
Insert cell
Insert cell
Insert cell
message
=
new
Promise
(
resolve
=>
{
setTimeout
(
(
)
=>
{
resolve
(
"I am asynchronous!"
)
;
}
,
3000
)
;
}
)
Insert cell
Insert cell
message
.
toUpperCase
(
)
Insert cell
Insert cell
Insert cell
miserables
=
{
const
response
=
await
fetch
(
"https://gist.githubusercontent.com"
+
"/mbostock/4062045"
+
"/raw/94d1b56d1e6c0d4bcc1edd86a41385a14ed4c1b3"
+
"/miserables.json"
)
;
return
response
.
json
(
)
;
}
Insert cell
Insert cell
Insert cell
function
*
range
(
n
)
{
for
(
let
i
=
0
;
i
<
n
;
++
i
)
{
yield
i
;
}
}
Insert cell
Insert cell
button
,
range
(
100
)
// button, as a user interaction, will trigger this cell to run
Insert cell
button
Insert cell
viewof
button
=
html
`<button>Restart</button>`
// viewof is crucial here
Insert cell
Insert cell
generator_cell_block_easy
=
{
for
(
let
i
=
0
;
i
<
100
;
++
i
)
{
yield
i
;
}
}
Insert cell
Insert cell
Insert cell
seconds
=
{
let
i
=
-
1
;
while
(
true
)
{
yield
new
Promise
(
resolve
=>
{
setTimeout
(
(
)
=>
{
resolve
(
++
i
)
;
}
,
1000
)
;
}
)
;
}
}
Insert cell
Insert cell
{
let
i
=
-
1
;
while
(
true
)
{
yield
Promises
.
delay
(
1000
,
++
i
)
;
}
}
Insert cell
Insert cell
Insert cell
observe_solution
=
Generators
.
observe
(
change
=>
{
let
i
=
-
1
;
let
interval
=
setInterval
(
(
)
=>
change
(
++
i
)
,
1000
)
;
return
(
)
=>
clearInterval
(
interval
)
;
}
)
Insert cell
Insert cell
input
=
html
`<input type=range>`
Insert cell
Generators
.
observe
(
change
=>
{
const
listener
=
(
)
=>
change
(
input
.
valueAsNumber
)
;
input
.
addEventListener
(
"input"
,
listener
)
;
change
(
input
.
valueAsNumber
)
;
// Report the initial value.
return
(
)
=>
input
.
removeEventListener
(
"input"
,
listener
)
;
}
)
Insert cell
Insert cell
hue
=
{
const
form
=
html
`<form><table>
<tr><td>
<input name=in type=range min=0 max=359 value=180 step=1>
<output name=out></output>° hue
</td></tr>
</form>`
;
form
.
oninput
=
(
)
=>
form
.
value
=
form
.
out
.
value
=
+
form
.
in
.
value
;
// make sure input and output values are the same
form
.
oninput
(
)
;
// Set the initial value.
return
form
;
}
Insert cell
Generators
.
input
(
hue
)
Insert cell
Insert cell
viewof
foo
=
html
`<input type=range min=0 max=1 step=any>`
Insert cell
foo
Insert cell
Insert cell
viewof
foo
Insert cell
(
viewof
foo
)
.
tagName
Insert cell
Insert cell
Purpose-built for displays of data
Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Try it for free
Learn more
Compare fork
Fork
View
Export
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
what_is_cell
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
answer
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
create_obj_inspect
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
block_statement_arrowFunc_oneMoreReturns
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
any_dom
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
raw_html
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
create_svg
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
create_raw_canvas
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
codePen_dynamic
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
cell_name
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
x
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
y
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
z
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
unique_no_circular
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
doop
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
doop
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
a
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
b
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
pure_reactive_function
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
k
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
promise_between_cells
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
message
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
miserables
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
cell_promise_power
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
generator_function
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
range
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
button_generator_update
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
button
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
generator_cell_block_easy
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
infinite_loop_yield
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
yield_promise_async
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
seconds
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
generator_interface
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
difficulty_pull_push
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
observe_solution
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
pull_push_observe
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
input
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
generalize_input
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
hue
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
input_viewof
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
foo
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
reference_user_interface
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML