JS之严格模式

严格模式

1.开启严格模式的方式

  • 在 script 标签内写入 “use strict”

2.变量必须定以后才能赋值,如果没有定义,但是使用 window 赋值属性,这个变量等同于赋值

  • window.a

3.参数名不能相同

function fn(a, a) {
  console.log(a);
  // 正常情况下,a=5,因为被覆盖
  // 严格模式下,报错
}
fn(3, 5);

4.预解析

  • 在栈中将 script 标签中所有使用 var let const 定义的变量预先在栈中开辟空间
  • 起变量名称
  • 然后在 script 标签中所有命名函数赋值给对应的函数变量
  • 函数的预解析区分块语句和全局

5.作用域

var a = 10;
{
  a = 20;

  // function a() {}
  a = 30;

  function a() {
    console.log(123);
  }
  a = 40;

  // function a() {}

  a = 50;
  console.log(a, '-----1');
}
console.log(a, '-----2');
  • 严格模式中
    • 如果块语句里存在同名函数会报错
    • 在只有一个函数 a 的情况下,块语句里的任何赋值都不会改变全局变量
  • 非严格模式中
    • 块语句外的变量为最后一个函数上面的赋值
    • 同名函数下面的任何赋值都与外面的变量无关

6.不对只读属性赋值

var str = 'asdasdasd';
str.length = 5;
// 改变不了

7.不能删除不可删除属性

var arr = [1, 2, 3];
delete arr.length;
// 改变不了

8.不允许使用 8 进制

9.禁止使用 eval

  • eval 反射 将字符串反射为变量或者表达式
var o1 = { a: 1 };
var o2 = { a: 1 };
var o3 = { a: 1 };
var o4 = { a: 1 };
var o5 = { a: 1 };

for (var i = 1; i < 6; i++) {
  eval('o' + i).a = i;
}
// eval('o' + 1) === o1
console.log(eval('o' + 1));
console.log('3+5');
console.log(eval('3+5'));

10.不能使用 arguments.callee、arguments.callee.callee

11.不允许使用 this

console.log(this);
function fn() {
  console.log(this);
  //非严格模式时,this执行window
  // 严格模式时this为undefined
}
fn();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值