ES5之严格模式

ES5之严格模式

严格模式

形成严格模式

在作用域最前面添加"use strict"

严格模式 "use strict";

"use strict" 放在作用域最前面(全局作用域 函数作用域 匿名函数的自调用)

优点

消除javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
(1)全局变量要显式的声明,否则会报错;必须先声明变量然后再使用。
(2)创建eval()作用域

- 消除代码运行的一些不安全之处,保证代码运行的安全;
(禁止this关键字指向全局对象。)

- 提高编译器效率,提高运行速度;

- 为未来新版本的javascript做好铺垫。

具体严格模式

声明变量方面
  • 在传统模式中,不通过关键词 var 直接声明变量不报错
a = 100;
console.log(a);
  • 在严格模式中,不通过关键词 var 直接声明变量会报错
fn()
function fn() {
    "use strict";
    a = 100;
    console.log(a); // 报错
}
eval()方面

eval() 接收一个字符串,把它当做js语句执行

  • 在传统模式中,eval()中的声明的变量是全局
var result = eval("1+1"); // eval 将传入的字符串按照 js语法执行
console.log(result);

  • 在严格模式中 ,创建eval()作用域 ,eval()中的声明的变量是局部
eval("function fn(){console.log(1111111)};fn()")    

eval("var a = 100;");
console.log(a);
this指向方面
  • 在传统模式中,this默认指向window
  • 在严格模式中,禁止函数指向window,默认指向undefined,但是这个说法不严谨,函数在调用的时候必须要有依存的对象,如果没有依存的对象,默认指向undefined
function fn() {
    console.log(this);
}

fn(); // 此处函数调用时没有明显的依存关系  所以this 为undefined

window.fn();// 此处函数调用时函数fn经由window调用   所以this 为window
删除变量方面
  • 在传统模式中,可以通过delete删除对象属性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 在严格模式中,禁止删除变量(window对象的属性 => 严格模式中禁止删除对象的固有属性 configurable : false ),删除固有属性会报错
var a = 100;
delete a;
// 获取一个对象中所有属性的描述
var str - new String('hello');
var result = Object.getOwnPropertyDescriptors(obj);
console.log(result);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

defineProperty详解

理解Object.defineProperty方法

参数重复声明方面
  • 在传统模式中,参数可以重复声明
  • 在严格模式中,参数不允许重复声明
 function fn(a,b,b){
     console.log(a,b);
 }
fn(1,2);
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值