1.块语句
常用于组合0~多个语句:语法:{语句1;语句2……}
*没有块级作用域:如:在for循环里面定义一个自增数 i,可以在for循环外取到它跳出循环时的值,而且for循环里面新定义的数据也能取到。
*但是如果在函数里面定义一个变量,在函数外面取不到。
2. var 声明语句
var a = 1,b = 1;//正确 var a = b = 1; //不正确,如果用在方法中会出错,如: function foo(){ var a = b = 1; } foo(); console.log(typeof a ); //'undefined' console.log(typeof b ); //'num'
3.try...catch...finally: try后面必须有catch或者finally。
嵌套:注意执行的顺序:
4.函数语句
1)function fd(){//dosth ;return;} 函数声明
2)var fe = function(){//dosth} 函数表达式
以上两种区别在于function声明会被优先处理,即函数前置;所以在定义function前调用fd()可以成功,函数表达式则不可以
3)for in (例:for name in obj)
(1)顺序不确定,不能用遍历的方法
(2)对象的enumerable为false时不会在里面出现
(3)受原型链影响
4)switch
如果不写break,就会继续往下走。
5)循环语句(略)
6)with 可以修改当前的作用域,可以深层访问对象属性。如:
with({x:1}){console.log(x);} with(document.forms[0]){console.log(name.value);} ==>var form = document.forms[0];console.log(form.name.value);
让JS引擎优化更难,可读性差,可被变量定义代替,严格模式下被禁用。(syntaxerror)
5.严格模式
是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性。
进入严格模式:'use strict' 可以是方法里,也可以是整个文档的开头,不一定非要写在第一行,可以在前面写其他的命令,但是不能写var之类。
1)不允许未声明的变量赋值。比如:x=1 只能写成 var x = 1。(refferenceerror)
2)arguments变为参数的静态副本(如果修改属性还是会相互影响)
3)delete参数、函数名报错。(syntaxerror)
4)delete不可配置的属性(如:configurable:false)报错 。(typeerror)
5)对象字面量重复属性名报错。(syntaxerror)
6)禁止八进制字面量。如:console.log(0123)。(syntaxerror)
7)eval,arguments变为关键字,不能作为变量、函数名。(syntaxerror)
8)eval 独立作用域。(undefined)
……