1、block
一般就是{}包括起来的代码块,注意的是,js没有块作用域,但是有函数作用域,全局作用域。
2、var
如:
1 2 3 4 5 6
| function () { var a = b = 1; } foo(); console.log(typeof a); console.log(typeof b);
|
3、try catch
1 2 3 4 5 6 7
| try { throw "test"; } catch(ex) { console.log(ex); } finally { console.log("finally"); }
|
4、function
function fd() { // do something }; // 函数声明
var fe = function { // do something }; // 函数表达式
区别:函数声明可以在声明前调用,且无报错;而函数表达式不可以在声明前调用,有TypeError
5、for…in
1 2 3 4 5
| var p; var obj = {x:1, y:2}; for(p in obj) { }
|
有几点需要注意:
- 顺序不确定
- enumerable为false时不显示
- for…in 对象属性受到原型链的影响
6、严格模式
严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性
1 2 3 4 5 6 7 8 9 10 11 12
| function func() { ; }大专栏 JavaScript之三 - 语法an>
"use strict" function func() { }
|
严格模式:
- 不允许使用with(SyntaxError);
- 不允许给未声明的变量赋值(RefrenceError);
- arguments变为参数的静态变量;
1 2 3 4 5 6 7 8 9 10 11
| !function(a) { arguments[0] = 100; console.log(a); }(1);
|
- 严格模式下删除形参会报错(1.configurable为true则报SyntaxError;2.configurable为false则报TypeError);
- 对象字面量属性重复报错。
var obj = {x:1, x:2}; // SyntaxError
- 禁止八进制字面量
console.log(0123); //SyntaxError
- eval, arguments变为关键字,不能作为变量、函数名,若违反则报SyntaxError
- eval独立作用域
1 2 3 4 5 6 7 8 9 10
| !function() { eval("val evalValue = 2;"); console.log(typeof evalValue); }();
!function() { ; eval("var evalValue = 2;"); console.log(typeof evalValue); }
|
严格模式总结:
- 不允许使用with;
- 所有变量必须声明,赋值给未声明的变量报错,而不是隐式创建全局变量;
- eval中的代码不能创建eval所在的作用域变量、函数,而是为eval单独创建一个单独的作用域,并在eval返回时废弃;
- 函数中的特殊对象arguments是静态副本,而不像非严格模式那样,修改arguments或修改形参会相互影响;
- 删除configurable为false会报错,而不是选择忽略;
- 禁止八进制字面量;
- eval、arguments为关键字,不能作为变量名或函数名;
- 一般函数的调用(不是对象方法的调用,也不是用apply/call/bind等修改this指向),this指向null而不是全局对象;
- 若使用apply/call,当传入null或者undefined时,this指向null或undefined而不是全局对象;
- 试图修改不可写属性(writable=false),在不可扩展的对象上添加属性时报TypeError,而不是忽略;
- arguments.caller、arguments.callee被禁用
JavaScript之三 - 语法
原文:https://www.cnblogs.com/lijianming180/p/12258728.html