with & eval(了解)

JavaScrip高级教程 · 127 字

with语句

能形成自己的作用域
严格模式下不能使用

var message = 'GO Message';
var obj = {name: 'lihua', message: 'With Message'};
function foo() {
	function bar() {
		console.log(message);
		with(obj) {
			console.log(message);
		}
	}
}

eval

特殊的函数,能够将传入字符串当成一段js代码运行

var jsString = 'var message = "Hello World"; console.log(message);'

eval(jsString);

配图

严格模式

具有限制性的js模式,使代码隐式的脱离“sloop”模式
配图

开启严格模式

  • 针对整个js文件:在js文件最顶部加入一行use strict
  • 针对某一个函数:在函数最前面加入一行use strict

严格模式限制

配图

  1. 无法意外创建全局变量
// 错误示例
message = 'Hello World'; // 不规范的全局变量
console.log(message);

function foo() {
	age = 20; // 不规范的全局变量
}
foo();
console.log(age);
  1. 不允许函数有相同的参数名称
// 错误示例
function foo(x, y, x) {
	console.log(x, y, x);
}
foo(10, 20, 30); // 30, 20, 30
  1. 静默错误
// 错误示例
true.name = "abc";
NaN = 123;
var obj = {};
Object.defineProperty(obj, "name", {
	configurable: false, // 是否可配置
	writable: false, // 是否可写
	value: "why"
})
  1. 不允许使用原先的八进制数字
// 错误示例
var num = 0123 ==> var num = 0o123;
  1. with语句不允许使用
  2. eval函数不会向上引用变量(不会给上层作用域增加变量等)
  3. 严格模式下的自执行函数的this只想undefined
// 示例
function foo() {
	console.log(this); // undefined而不是window
}