with

with的作用就是可以给他传入一个对象,那么with中就可以访问到对象中的变量

  1. var message = "hello world";
  2. // console.log(message);
  3. // with语句:可以形成自己的作用域
  4. var obj = { name: "zx", age: 18, message: "asd" };
  5. function foo() {
  6. function bar() {
  7. var message = "qq";
  8. with (obj) {
  9. console.log(name);
  10. }
  11. }
  12. bar();
  13. }
  14. foo();

也就是说,with()执行时传入的参数会成为with作用域的参数,可以访问。
并且with不推荐使用,因为会产生非常多的bug。

eval

eval是一个特殊的函数,它可以将传入的字符串当作JS代码来运行

  1. var jsString = 'var message = "hello world";console.log(message);';
  2. eval(jsString);

eval也不推荐使用,因为可读性非常差,并且无法被JS引擎优化,效率比较差。

严格模式

ES5提出了严格模式(Strict Mode)的概念:

  • 严格模式很好理解,是一种具有限制性的JS模式,从而使代码隐式的脱离了“懒散(sloppy)”模式
  • 支持严格模式的浏览器在检测到代码中有严格模式时,会以更加严格的方式对代码进行检测和执行

严格模式对正常的JS语义进行了一些限制:

  • 严格模式通过抛出错误来消除一些原有的静默(silent)错误
  • 严格模式让JS引擎在执行代码时进行更多的优化(不需要对一些特殊的语法进行处理)

    开启严格模式

    1. "use strict";
    写在最前面即可。