1 | suite 'Scope', ->
|
2 |
|
3 | test 'basics', ->
|
4 | a = true
|
5 | ok a
|
6 | fn = -> b = 0
|
7 | throws -> b
|
8 | eq 'undefined', typeof b
|
9 |
|
10 | test 'reassignments in a closure', ->
|
11 | a = false
|
12 | ok not a
|
13 | do -> a = true
|
14 | ok a
|
15 |
|
16 | b = false
|
17 | fn = -> b = true
|
18 | ok not b
|
19 | ok fn()
|
20 | ok b
|
21 |
|
22 | test 'vars are function-scoped, not block-scoped', ->
|
23 | fn = -> true
|
24 | if fn()
|
25 | a = 1
|
26 | else
|
27 | a = 0
|
28 | ok a
|
29 |
|
30 | test 'function params are added to scope', ->
|
31 | fn = (p) -> ok p
|
32 | fn true
|
33 |
|
34 | test 're-assignments of function params', ->
|
35 | nonce = {}
|
36 | fn = (p) ->
|
37 | eq nonce, p
|
38 | p = 0
|
39 | ok not p
|
40 | fn nonce
|
41 |
|
42 | test 're-assignments of function params in a loop', ->
|
43 | nonce = {}
|
44 | fn = (p) ->
|
45 | eq nonce, p
|
46 | a = 1
|
47 | while a--
|
48 | p = 0
|
49 | ok not p
|
50 | fn nonce
|
51 |
|
52 | test 're-assignments of function params in a loop used as a value', ->
|
53 | nonce = {}
|
54 | fn = (p) ->
|
55 | eq nonce, p
|
56 | a = 1
|
57 | b = while a--
|
58 | p = 0
|
59 | ok not p
|
60 | fn nonce
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | test 'loop iterators available within the loop', ->
|
70 | for v, k in [1]
|
71 | ok v
|
72 | ok not k
|
73 | return
|
74 |
|
75 | test 'loop iterators available outside the loop (ew)', ->
|
76 | fn = ->
|
77 | for v, k in [1]
|
78 | fn()
|
79 | ok v
|
80 | ok not k
|
81 |
|
82 | test '`do` acts as `let`', ->
|
83 | outerNonce = nonce = {}
|
84 | do (nonce) ->
|
85 | eq outerNonce, nonce
|
86 | nonce = {}
|
87 | eq outerNonce, nonce
|