一、with语句
var str = "Four in one";
var obj = { name: 123, age: 15, str: "dd" };
with (obj) {
console.log(str);
}
- with会产生作用域,在访问变量时,会先从传入的参数中进行寻找,没有在沿着作用链往上找
- with不推荐使用,能看懂用法即可
二、eval函数
var str = "var msg = 'Four in one'; console.log(msg)";
eval(str)
- eval可以让一段字符串当作js来执行
- eval不推荐使用,能看懂用法即可
三、严格模式
严格模式是一种具有限制性的js模式,使代码模式脱离了懒散(sloppy)模式
严格模式的好处:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
1、严格模式开启方法
- 严格模式可以在js文件或者函数中开启,开启方式为添加
'use strict'
整个脚本开启:
"use strict";
var v = "Hi! I'm a strict mode script!";
某个函数开启:
function strict() {
// 函数级别严格模式语法
'use strict';
function nested() {
return "And so am I!";
}
return "Hi! I'm a strict mode function! " + nested();
}
function notStrict() {
return "I'm not strict.";
}
2、严格模式下减少的常见错误
- 不再保持静默
//不再保持静默
true.p = 123 //编译错误
NaN.p = 123 //编译错误
- this的改变
不再进行默认绑定
console.log(this) //结果不再为window,而是undefine
- eval与arguments的规则
eval不在为上下文中创建变量或函数
function doSomething(){
eval("var x=10");
alert(x); // 抛出TypeError错误
}