第四章 核心关键词(表达式)-->短语 对应过来 语句就是js的整句或命令,以分号结束。
表达式是计算一个值,而语句是使得某件事发生,或者说某些值发生了改变---即带有“副作用”。
表达式语句:带有副作用的表达式,诸如赋值和函数调用,可以单独作为语句使用。
复合语句和空语句:用花括号括在一起的语句是一条复合语句;空语句,比如if(flag);这个条件语句之后有且仅包含一条语句,这个例子里便是空语句
空语句的实例(确实是有它的用处的):for(i=0;i<a.length;a[i++]=0);
PS:语句块结尾不需要分号;没有块级作用域
PS:温馨提示,在使用空语句的时候最好做一点注释……
声明语句:用于声明新变量(var)或定义新变函数(function)等。(通过创建变量和函数可以更好地组织代码和语义)
PS:关于变量声明,优先把需要赋值的语句写在前面;没赋值默认为undefined
重申:
1.在同一作用域下,变量声明都会被提到顶部执行
2.多次声明变量不会多变量,也不会影响变量
函数定义用function(两种语法结构)
first:
var f=function(){};
second:
function f(){};
函数声明:感觉可以把这个和定义里面的second混在一起考虑
function funcname([arg1 [, arg2 [..., argn]]]) {
statements
}
PS:函数的花括号是必须滴;函数声明的变量是不能删除,但是可以重写。
sepcial word:
1.ECMAScript标准规范并没有将函数声明归类为真正的语句——函数声明并不能出现在if语句,while循环或其他任何语句中……
2.声明函数和函数定义的不同有点类似变量的声明,举个例子:var a=1;
如果这个a是全局变量,那么javascript初始化好的时候,便已经将a声明了,但是此时a是undefined,而只有等到执行这条语句,a才变成1(具体参考第三章)。
对应函数的意思就是,你可能是在最后面写的函数,但是你依旧可以在他之前调用这个函数,比如:
<script>
console.log(hello());
function hello(){
return "I can";
}
</script>
没有任何错误,就是因为函数声明的结果。与变量定义的区别是函数声明不仅仅提前了函数名,还有函数体。
3.将函数声明放在其他语句内的做法不具备可移植性。(这句话目前还不是很懂……以后如果遇到了这种实例再进行研究)
4.delete删除不了var或者function声明的函数或者变量。(这个非常非常的重要,可以自己尝试一下)
用于改变语句的默认执行顺序:
条件语句:分支,决策点
if(else), else if, switch(当所有分支都依赖于一个表达式的值的时候)
PS:switch的结构---按顺序执行,并不是case后面仅仅跟一条语句
switch(expression) {
case "表达式":
语句
break;
[default:语句]
}/*这里的表达式与expression的比较用的是"==="*/
switch里的case表达式是在运行时计算的,所以尽量用常量,否则会使得效率变低。
循环语句:for,while,do/while,for/in
while 直到不满足条件时跳出循环……
do/while:特点至少循环一次【这种场景不常见】
do {
statement(可以不用大括号……)
}while(expression);
for/in:方便遍历对象属性成员 eg:for(var p in o) console.log(o[p]);
非常有趣而巧妙的获取key数组的方法(主要是计算“p”的表达式并且会进行赋值),例:(前提是可枚举的)
var o={x:1,y:2,z:3};
var a=[],i=0;
for(a[i++] in o);
PS:一般来说,代码写中定义的所有属性和方法都是可枚举的。
注意,只有"可枚举"的属性才能遍历到,比如toString()(之类由JavaScript语言核心所定义的内置方法就不是"可枚举的")
特殊手段??/*目前不详*/可以将可枚举属性变为不可枚举。
PS:继承的自定义属性也可以枚举出来。
在for/in循环体中:
删除(未枚举)——>不会枚举到
定义(新属性)——>(通常)不会枚举到;(特殊)有些实现可以枚举增加的继承属性
属性枚举的顺序:*(暂不深入——到时候可以根据具体情况具体分析)
从这里可以看出:for/in是要慎用的。
跳转语句:continue,break,return,throw(暂不深入)
标签语句——语句是可以添加标签的,由标识符和冒号组成。
break:可以"跳出"任何闭合的语句块。但是不能跳出函数
continue:只能在循环体内使用,默认跳出一层,可以跳出多层嵌套的循环体逻辑;for和while的不同
return:默认返回undefined
throw:try catch finally
其他语句类型:
width:
debugger:
use strict:
PS:JavaScript程序无非是一系列可执行语句的集合。
(上周实在太忙了,所以没有更成,所以这周要加更,这周加这章 至少更新两章)未完待续……