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
严格模式限制

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