with、eval、严格模式

一、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错误
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容