JavaScript学习笔记——语句与严格模式
2016-05-05 12:32
639 查看
block块
block块语句常用于组合0~多个语句。用一对花括号定义。
语法:
{
语句1;
语句2;
...;
语句n;
}
没有块级的作用域
如
{
var i=10;
}
这两者效果是一样的
var i = 10;
{
...
}
console.log(i); //仍然可以访问的到
但是有函数作用域、全局作用域
function a(){
var i = 10;
}
console.log(i); //undefined
但是
function foo(){
var a = b = 1;
}
foo();
console.log(typeof a); //undefined
console.log(typeof b); //number
此时b 成为了全局变量,但是
console.log(b); //又是null
try catch
try{
throw "test";
}catch (ex){
console.log(ex); //捕获try抛出的异常
}finally {
console.log("finally"); //无论是否捕获到异常,均会执行finally的代码块
}
try catch 的嵌套语句
当内部的try抛出异常时,
1、如果内部没有catch语句捕获异常,将该异常继续向上级抛出
2、如果内部有catch语句捕获异常时,该异常被内部catch处理,不会再继续抛出
function switch 循环
function
function fd(){ //函数声明
//do sth
return true;
}
var fe = function(){ //函数表达式
//do sth
};
//函数声明会被预先处理(函数前置)
在函数声明前面调用函数也是可行的,但是函数表达式就不行
fd(); //true
function fd(){
//do sth
return true;
}
fe(); //TypeError
var fe = function(){
//do sth
};
for..in
var p;
var obj = {x:1,y:2};
for(p in obj){
console.log(p + " : " + obj[p] );
}
switch
跟其他的一样一样的
循环
一样一样的
with 不建议使用with,使作用域复杂,影响引擎优化,影响可读性
with({x:1}){
console.log(x); //相当于{x:1}.x;
}
with(document.forms[0]){
console.log(name.value); //相当于document.forms[0].name.value;
}
严格模式
严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性
1.不允许使用with
2.不允许未声明的变量被赋值
3.arguments变为参数的静态副本
4.delete参数、函数名报错
5.delete不可配置的属性报错
6.对象自变量重复属性名报错
7.禁止八进制自变量
8.eval,arguments变为关键字,不能作为变量或函数名
!function(a){
arguments[0] = 100; //修改第一个argument为100,即a
document.write(a); //从1 修改为 100
}(1);
在严格模式下,argument变为静态副本,任意修改都不会影响参数的值
!function(a){
'use strict';
arguments[0] = 100; //修改第一个argument为100,即a
document.write(a); //仍然为1
}(1);
但是如果传入的是个对象,arguments可修改对象的属性
!function(a){
'use strict';
arguments[0].x = 100; //修改a的属性x从1到100
document.write(a.x); //变为100
}({x:1});
function func(){
'use strict'
}
或
'use strict'
function func(){
}
!function(){
var obj = {x:1,x:2}; //取最后一个值
console.log(obj.x);
}();
!function(){
'use strict';
var obj = {x:1,x:2}; //严格模式下报错 SyntaxError
console.log(obj.x);
}();
block块语句常用于组合0~多个语句。用一对花括号定义。
语法:
{
语句1;
语句2;
...;
语句n;
}
没有块级的作用域
如
{
var i=10;
}
这两者效果是一样的
var i = 10;
{
...
}
console.log(i); //仍然可以访问的到
但是有函数作用域、全局作用域
function a(){
var i = 10;
}
console.log(i); //undefined
但是
function foo(){
var a = b = 1;
}
foo();
console.log(typeof a); //undefined
console.log(typeof b); //number
此时b 成为了全局变量,但是
console.log(b); //又是null
try catch
try{
throw "test";
}catch (ex){
console.log(ex); //捕获try抛出的异常
}finally {
console.log("finally"); //无论是否捕获到异常,均会执行finally的代码块
}
try catch 的嵌套语句
当内部的try抛出异常时,
1、如果内部没有catch语句捕获异常,将该异常继续向上级抛出
2、如果内部有catch语句捕获异常时,该异常被内部catch处理,不会再继续抛出
function switch 循环
function
function fd(){ //函数声明
//do sth
return true;
}
var fe = function(){ //函数表达式
//do sth
};
//函数声明会被预先处理(函数前置)
在函数声明前面调用函数也是可行的,但是函数表达式就不行
fd(); //true
function fd(){
//do sth
return true;
}
fe(); //TypeError
var fe = function(){
//do sth
};
for..in
var p;
var obj = {x:1,y:2};
for(p in obj){
console.log(p + " : " + obj[p] );
}
switch
跟其他的一样一样的
循环
一样一样的
with 不建议使用with,使作用域复杂,影响引擎优化,影响可读性
with({x:1}){
console.log(x); //相当于{x:1}.x;
}
with(document.forms[0]){
console.log(name.value); //相当于document.forms[0].name.value;
}
严格模式
严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性
1.不允许使用with
2.不允许未声明的变量被赋值
3.arguments变为参数的静态副本
4.delete参数、函数名报错
5.delete不可配置的属性报错
6.对象自变量重复属性名报错
7.禁止八进制自变量
8.eval,arguments变为关键字,不能作为变量或函数名
!function(a){
arguments[0] = 100; //修改第一个argument为100,即a
document.write(a); //从1 修改为 100
}(1);
在严格模式下,argument变为静态副本,任意修改都不会影响参数的值
!function(a){
'use strict';
arguments[0] = 100; //修改第一个argument为100,即a
document.write(a); //仍然为1
}(1);
但是如果传入的是个对象,arguments可修改对象的属性
!function(a){
'use strict';
arguments[0].x = 100; //修改a的属性x从1到100
document.write(a.x); //变为100
}({x:1});
function func(){
'use strict'
}
或
'use strict'
function func(){
}
!function(){
var obj = {x:1,x:2}; //取最后一个值
console.log(obj.x);
}();
!function(){
'use strict';
var obj = {x:1,x:2}; //严格模式下报错 SyntaxError
console.log(obj.x);
}();
相关文章推荐
- JavaScript学习笔记——表达式与运算符
- JavaScript学习笔记——数据类型
- Javascript函数----操作DOM文档对象模型
- js代码的调试
- resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现
- javascript 经典案例
- Javascript函数[实用案例--网页抽奖]
- Js打开新窗口拦截问题整理
- javascript练习题(六)
- Extjs插入图片
- Map (就一个json.jar)
- JavaScript 关键字
- JavaScript 关键字
- 在线压缩htmlcssjs地址
- JS实现选项卡
- js--引用类型Array--2.数组合并几种方法
- 深入理解JavaScript系列
- javascript的 replace() 方法的使用讲解
- JavaScript实现返回上一页面并刷新的小例子
- 最近改js学到的一些心得