cs总结

基础

熟悉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 列表解析
result = (item.value for item in array when item.name is 'test')

# 前十个全局属性(变量)
globals = (name for name of window)[0...10]

# 对象解析
ages = for key, value of Object
"#{key} is #{value}"

# 定义函数
square = (x) ->
x * x
# body...
# 定义的时候有括号,调用的时候没括号


# 数组
song = [
'do'
're'
'mi'
'fa'
'so'
]


# 对象
singers =
brother:
name:'max'
age:11
sister:
name:'ida'
age:9
s-sister:
name:'haha'
age:2

# if else
if one and/or/is/not two
# body...
else
# body...

# 三元判断
date = if one and two then value else other

# 函数链式调用
$ 'body'
.click (e) ->
$ '.box'
.fadeIn 'fast'
.addClass 'show'
.css 'background', 'white'

# 回调写法和胖箭头函数
Account = (customer,cart) ->
@customer = customer
@cart = cart

$('.shapping_cart')
.on 'click', (event) =>
@customer.purchase @cart

# promise写法
sleep = (ms) ->
new Promise (resolve) ->
window.setTimeout resovle,ms

# async写法
直接写在普通函数里,阻塞的执行

# 类的写法
class Animal
constructor: (@name) ->

move:(meters) ->
alert @name + " moved #{meters}m."
# body...

命令行

编译命令,

1
coffee -c -o targetfolder filename

先是两个参数,然后是目标文件夹,最后是编译的文件

数组

  1. 数组换行可以省略一个逗号,那就都换行吧,彻底抛弃逗号
  2. 直接加尾巴截取数组,还可以直接用来赋值
    1
    [0...10]

对象

  1. 对象的花括号用缩进代替

函数

函数的区别,

  1. 定义的时候有括号,调用的时候没括号,调用的时候没有参数也需要括号
  2. 函数没有大括号,用箭头识别,箭头左边小括号里放参数,右边是函数体
  3. 函数默认返回函数体最后一个表达式的值,可以省略return
  4. 空return取消return
  5. 变量不需要声明,所以函数名也不需要声明
  6. 默认参数
  7. 胖箭头函数,作用只是绑定this? 需要返回一个绑定this的函数的时候使用

async函数

直接把await写在普通函数里

词法作用域和变量安全

词法作用域

变量安全

  1. 函数的所有 CoffeeScript 结果都被一个匿名函数包裹
1
(function(){ ... })();

这层安全的封装, 加上自动生成的 var 关键字,使得不小心污染全局命名空间很难发生.

  1. 因为被包裹了,用顶层变量, 需要将其作为赋值在 window 上, 或者在 CommonJS 里的 exports 上.
  2. 存在操作符(existential operator)可以帮你写出一个可靠的方式找到添加位置; 比如你的目标是同时满足 CommonJS 和浏览器: exports ? this
    4.

判断语句

  1. 一个判断一个赋值的判断简写
1
name = value if condition
  1. 普通写法,和js相比就是省略了条件的小括号和函数体的大括号
  2. 三元判断符
1
name = if condition then rightvalue else wrongvalue
  1. unless: 不是… ,就执行,是就跳过
1
2
3
4
5
return 哈哈哈 unless 嘿嘿嘿
//如果不是嘿嘿嘿,就返回哈哈哈
//如果是嘿嘿嘿,就跳过往下执行
//作用:满足嘿嘿嘿才能往下执行
//干嘛不用if?

if else 和unless都可以,看个人喜好

变参

变参函数定义,参数后加上…

变参函数调用,函数调用后加上…

循环和推导式

for in遍历数组

1
item-operation for item in 数组

两个参数

1
for in 循环的参数,第一个是值,i是index

加上判断

1
item-operation for item in 数组 when item isnt value

by控制循环的跨度

for of 遍历对象

1
2
3
4
5
6
7
8
#遍历所有键值对
ages = for key,value of yearsOld
"#{child is #{age}"

#遍历自有非继承键值对
for own key,value of yearsOld

#遍历gegerator用from

while和until

1
2
3
4
# 满足条件就一直执行
buy() while supply > demand
# 满足条件就不执行了
sell() until supply > demand

for in + do

配合起来,对每一个满足条件的元素执行操作

alias

CoffeeScript JavaScript
is ===
isnt !==
not !
and &&
or
ture,yes,on true
false,no,off false
@,this this
a in b [].indexOf.call(b,a) >=0
a of b a in b
for a form b for (a of b)
a ** b Math.pow(a,b)
a // b Math.floor(a/b)
a %% b (a % b + b) % b

存在性操作符

1
2
3
4
5
?name
# 只要不是null或者undefined就返回true

speed ?= 15
# 当speed为null或者undefined的时候执行赋值

自己的总结

  1. 没有冒号
  2. 没有括号,用换行和缩进控制层级
  3. 数组的省略写法
  4. 编译之后给module.exports外面套一层自执行函数对导出模块没有影响
  5. if判断里面没有默认return

问题

控制返回值,不想让它包裹一层然后返回,可以写
return 那么对async函数有影响

资料

coffeescript编码风格指南

不喜欢的地方

  1. 关于语义化的思考
  2. 调用函数的时候,前面一个参数较复杂,后面一个参数需要仔细辨别,没有括号直观
    3.

文章标题:cs总结

本文作者:Benny

发布时间:2020-06-08, 19:49:32

最后更新:2018-06-14, 10:56:48

原始链接:https://benny233.github.io/2020/06/08/cs总结/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录