JS严格模式

来源:Javascript 严格模式详解

精简总结一下阮大神的文章,严格模式下:

  • "use strict" 必须是当前作用域(全局作用域或者函数作用域)中第一句实际运行的语句,否则当前作用域内不会被严格模式所约束
  • 当需要多个js合并成一个时,要使用严格模式,最好是使用 IIFE
  • 变量必须声明后再使用
  • 禁止使用with语句
  • eval中语句的执行环境属于第三种作用域,拥有自己的作用域
  • 全局环境中的this指向undefined
  • 严格模式下的函数作用域内,禁止使用函数对象的caller和arguments属性,也禁止使用arguments.callee
  • 只有configurable设置为true的对象属性,才能被删除
  • 不符合语义的操作会被拒绝、显式报错
  • 不允许重名属性名、函数形参名
  • 禁止以0开头来表示8进制数
  • 不允许使用arguments来当变量名、arguments不再追踪参数的变化。以下代码在 非严格模式下,输出 999
    "use strict"
    function f(a){
        arguments[0] = 999;
        console.log(a)
    }
    f(1) // 1
  • 只允许在全局作用域或函数作用域的顶层声明函数【因为块作用域还没出现,所以这一条约束在当前来说,没起什么作用和影响】

Caller和Callee

  如果一个函数f是在全局作用域内被调用的,则f.caller为null,相反,如果一个函数是在另外一个函数作用域内被调用的,则f.caller指向调用它的那个函数对象

  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee

 

posted @ 2017-09-15 21:25  HelloHello233  阅读(160)  评论(0编辑  收藏  举报