Skip to content

Commit eb02a75

Browse files
committed
Update README.md
1 parent 095eefc commit eb02a75

File tree

1 file changed

+159
-37
lines changed

1 file changed

+159
-37
lines changed

README.md

Lines changed: 159 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,31 @@
44
zScript提供了两种形式的变量定义语句。
55

66
##### 1.直接定义的形式,该语句的一般形式为:
7-
7+
88
var 标识符;
99
该语句的含义是:定义变量名为“标识符”的变量。例如:
10-
10+
1111
var a;
1212
该语句的作用是:定义一个名为“a”的变量。
1313

1414
##### 2.定义同时给变量初始化赋值,该语句的一般形式为:
15-
15+
1616
var 标识符 = 表达式;
1717
该语句的含义是:定义变量名为“标识符”的变量,且给变量赋值为表达式的结果。例如:
18-
18+
1919
var a = 1 + 2;
2020
该语句的作用是:定义一个名为“a”的变量,且赋值为3。
2121
“var”关键字可同时定义多个变量,每个变量之间使用符号“,”分割。
22-
### 匿名函数的定义
23-
匿名函数定义的一般形式为:
24-
25-
(形参列表) {
26-
语句组
27-
}
28-
该语句的含义是:生成一个函数对象,例如:
29-
30-
(a) {
31-
console.log(a);
32-
}
33-
该语句的作用是:定义一个函数,它有一个名为“a”的形参,执行此函数会将a的值打印到屏幕上。
34-
形参列表,可为空、一个、多个,多个形参之间使用“,”分割。
3522
### 数组的定义
3623
数组定义的一般形式为:
37-
24+
3825
var a = [表达式1, 表达式2, ...];
3926
该语句的含义是:生成一个数组,数组元素为中括号中表达式的结果。例如:
40-
27+
4128
var a = [1, 2, 3];
4229
该语句的作用是:定义一个包含三个元素的数组,元素的值分别为1、2、3,然后赋值给变量a;
4330
数组使用“[”“]”定义,中间内容可以为空、一个表达式、多个表达式,多个表达式之间使用“,”隔开。
44-
31+
4532
a = a[0];
4633
取数组元素语法和C语言一样,都是中括号中写入数组下标。
4734
### 选择控制语句
@@ -53,37 +40,33 @@ Break语句用于switch结构中,用于终止当前switch结构的执行。
5340
zScript提供了两种形式的if语句。
5441
##### 1.单if子句的if语句。该if语句的一般形式为:
5542

56-
if(表达式)
57-
{
43+
if(表达式) {
5844
语句组
5945
}
6046
该语句的含义是:只有表达式的值为非零值时,才执行其内部的语句组。例如:
6147

62-
if ( a > b )
63-
{
48+
if ( a > b ) {
6449
console.log(“hello”);
6550
}
6651
该语句的作用是:当a的值大于b的值时(此时,“a>b”的值为真,为非假值),在屏幕上显示“hello”;否则,不显示“hello”。
6752
##### 2.带else子句的if语句。该if语句的一般形式为:
6853

69-
if ( 表达式 )
70-
{
54+
if ( 表达式 ) {
7155
语句组1
7256
} else {
7357
语句组2
7458
}
7559
该语句的含义是:当表达式的值为非假时,执行语句组1,而不执行语句组2;否则,即表达式的值为假时,执行语句组2,而不执行语句组1。例如:
7660

77-
if ( a > b )
78-
{
61+
if ( a > b ) {
7962
console.log(“hello1”);
8063
} else {
8164
console.log(“hello2”);
8265
}
8366
该语句的作用是:若a的值大于b的值(此时“a>b”为真,为非假值),则在屏幕上显示“hello1”,而不显示“hello2”;否则,即表达式的值为假时,显示“hello2”,而不显示“hello1”。
8467
#### switch语句
8568
Switch语句与if语句一样,也可以实现分支选择。但if语句是判断一个表达式的值是否为假,决定是否执行某个分支;而switch语句是计算一个表达式的值,根据计算结果,从哈希表查询从哪个分支开始执行代码。Switch语句的一般形式为:
86-
69+
8770
switch( 表达式 )
8871
{
8972
case 常量1:
@@ -101,15 +84,16 @@ switch语句的执行过程:
10184
* 2.如果“表达式”的值与某个case后面的“常量”的值相同,则从这里开始顺序执行语句。结果switch执行有两种形式:一是遇到break语句为止;二是未遇到break语句,则程序依次执行完所有语句组。
10285
* 3.如果“表达式”的值与任何一个case后面的“常量”的值都不相同,当有default子句时,则执行default后面的语句,如果没有default子句,则结束switch。
10386

87+
**注:与C++语言不通的是,case后可跟任意常量,不仅限于整数。**
88+
10489
其中break的一般形式为
105-
90+
10691
break;
10792
### 循环控制语句
10893
#### while语句
10994
while语句的一般形式为
110-
111-
while( 表达式 )
112-
{
95+
96+
while( 表达式 ) {
11397
循环体
11498
}
11599
while语句的执行过程:
@@ -119,9 +103,49 @@ while语句的执行过程:
119103

120104
小括号中表达式的值是否为假,决定着循环体是终止还是继续循环。因此,该表达式的值为循环条件。while循环语句的执行特点是,先判断循环条件是否成立,然后决定是否执行循环体。
121105
当while语句的循环体只包含一条语句时,包含该循环体的“{}”可以省略。
106+
##### 带else的while语句
107+
108+
while( 表达式 ) {
109+
循环体
110+
} else {
111+
...
112+
}
113+
当while语句的循环体正常结束时将执行else语句中的代码,否则不执行。由表达式的值为假时导致的循环结束视为循环体正常结束,由break语句导致的循环体结束视为非正常结束。
114+
115+
正常结束的示例:
116+
117+
var i = 0;
118+
while( i++ < 3 ) {
119+
console.log(i);
120+
} else {
121+
console.log("正常结束");
122+
}
123+
124+
此段代码的执行结果为:
125+
126+
1
127+
2
128+
3
129+
正常结束
130+
131+
非正常结束的示例:
132+
133+
var i = 0;
134+
while( i++ < 3 ) {
135+
console.log(i);
136+
break;
137+
} else {
138+
console.log("正常结束");
139+
}
140+
141+
此段代码的执行结果为:
142+
143+
1
144+
145+
122146
#### for语句
123147
在两种循环语句中,for语句最为灵活。for语句的一般形式为:
124-
148+
125149
for (表达式1; 表达式2; 表达式3)
126150
{
127151
循环体
@@ -133,10 +157,12 @@ for语句的执行过程:
133157
* 3.求解表达式3。
134158
* 4.结束循环。
135159

160+
**同while语句,for语句也可以存在else分支语句,表现形式也跟while语句一致。**
161+
136162
### 对象的定义
137163

138164
对象定义的一般形式为:
139-
165+
140166
{
141167
属性名1: 属性的值,
142168
属性名2: 属性的值,
@@ -151,7 +177,103 @@ for语句的执行过程:
151177
age: 18
152178
};
153179
变量object即是一个对象,它包含两个属性。
154-
注:当对一个对象不存在的属性赋值时会将此属性加入到对象中,例如:
155-
180+
181+
**注:当对一个对象不存在的属性赋值时会将此属性加入到对象中,例如:**
182+
156183
object.sex = '男';
157184
对象object中就会多出一个“sex”属性。
185+
### 函数的定义
186+
函数定义的一般形式为:
187+
188+
var fun_name = (形参列表) {
189+
语句组
190+
};
191+
该语句的含义是:生成一个函数对象,例如:
192+
193+
var print = (a) {
194+
console.log(a);
195+
};
196+
197+
print(1);
198+
199+
此段代码执行结果为:
200+
201+
1
202+
203+
该语句的作用是:定义一个函数,它有一个名为“a”的形参,执行此函数会将a的值打印到屏幕上。
204+
形参列表,可为空、一个、多个,多个形参之间使用“,”分割。
205+
206+
#### 函数值的返回
207+
和JavaScript类似,函数的定义中不必包含返回值的说明,直接在函数体任意位置添加 **return** 语句即可结束函数的执行,并且返回指定的值。
208+
209+
##### 单值返回
210+
211+
var test = (arg1, arg2) {
212+
return arg1 + arg2;
213+
};
214+
215+
console.log(test(1, 2));
216+
217+
此段代码执行结果为:
218+
219+
3
220+
221+
##### 多值返回
222+
223+
var test = (arg1, arg2) {
224+
return arg1, arg2;
225+
};
226+
227+
console.log(test(1, 2));
228+
229+
此段代码执行结果为:
230+
231+
<1, 2>
232+
233+
return语句在实现上其实仅支持返回一个值,能“多值返回”是因为
234+
235+
表达式1, 表达式2, ..., 表达式n,...
236+
237+
的写法是定义了一个“元组”类型的数据。
238+
239+
### 元组
240+
#### 定义
241+
元组是一种特殊的数据类型,此类型无法直接被定义,通常和函数的return语句配合使用,可通过函数创建一个元组数据,如:
242+
243+
var tuple = () {
244+
return 1, 2, 3;
245+
}();
246+
247+
console.log(tuple);
248+
249+
此段代码的执行结果为:
250+
251+
<1, 2, 3>
252+
253+
使用console.log打印元组类型的数据时,会使用 “<”、“>”将其包括起来,并且使用“,”分割每个元素的值。
254+
255+
#### 赋值操作
256+
257+
var tuple = () {
258+
return 1, 2;
259+
}();
260+
var a, b;
261+
a, b = tuple;
262+
console.log(a, b);
263+
264+
元组作为右值时,如果左值为 **“表达式1, 表达式2, ...”** 的写法,则会依次将元组中的值赋值给:表达式1、表达式2、...。否则,当左值为单个表达式时,则跟普通赋值一致,将元组整体赋值给此表达式。
265+
266+
### 作用域
267+
268+
作用域比较明显的标识的是:"{}",如if、while、for、函数体等语句皆是使用"{}"作为作用域限制的标识。"{}"也可以不依附于if、while、for等语句单独使用,如:
269+
270+
{
271+
var a = 1;
272+
}
273+
274+
console.log(a);
275+
276+
此段代码的执行结果为:
277+
278+
[Error]: undefined reference: a
279+

0 commit comments

Comments
 (0)