导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

历史

ES5 严格模式

写法

// 写在所有代码的最上方
'use strict'; // 严格模式 字符串

// 写在函数内部第一行(推荐)
function test() {
	'use strict';
}

⭐️ with 可以改变作用域

var a = 1;
var obj = {
	a: 2
}
function test() {
	var a = 3;
  with(test) {
  	console.log('test->>', a);
  }
  with(window) {
  	console.log('window->>', a);
  }
  with(obj) {
  	console.log('obj->>', a);
  }
}
test();

Untitled

严格模式下报错

'use strict';
var a = 1;
var obj = {
	a: 2
}
function test() {
	var a = 3;
  with(test) {
  	console.log('test->>', a);
  }
}
test();

Untitled

callee / caller 严格模式下报错

'use strict';
function test() {
	console.log(arguments.callee)
}
test();

Untitled

'use strict';
function test() {
	test2();
}
function test2() {
	console.log(test2.caller)
}
test();

Untitled

严格模式下,变量需要显示声明

'use strict';
function test() {
	var a = b = 1;
}
test();

Untitled

⭐️ 严格模式下,函数内部 this 是 undefined

'use strict';
function test() {
	console.log(this);
}
test();

Untitled

⭐️ 严格模式下,函数形参名不能重复

function test(a, a) {
	console.log(a);
}
test(1, 2);

Untitled

'use strict';
function test(a, a) {
	console.log(a);
}
test(1, 2);

Untitled

非严格模式下,打印后者:

function test(a, a) {
  console.log(a, a);
}

test(1, 2); // 2 2

⭐️ 严格模式下,对象的属性名可以重复,不会报错

'use strict';
var obj = {
	a: 1,
  a: 2
}
console.log(obj.a);

Untitled

⭐️ 严格模式下,eval 有自己作用域

eval('var a = 1; console.log(a);');
console.log(a);

Untitled

'use strict';
eval('var a = 1; console.log(a);');
console.log(a);

Untitled