理解JavaScript严格模式的相关问题






1.变量必须通过var进行声明,否则将会报错

2.JavaScript禁掉了while关键字

3.普通模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

4.为了让代码更安全 禁止this关键字指向全局对象

5.为了让代码更安全 禁止在函数内部遍历调用栈

6.为了让代码更安全 禁止删除变量

7.普通模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。

8.严格模式下,对禁止扩展的对象添加新属性,会报错。

9.普通模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

10.普通模式下,如果函数有多个重名的参数(解决办法可以用arguments[i]读取)。严格模式下,多个重名的参数这属于语法错误。

11.禁止八进制表示法:普通模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。

12.arguments对象的限制:arguments是函数的参数对象,严格模式对它的使用做了限制。
    1:不允许对arguments赋值
    2:arguments不再追踪参数的变化
    3:禁止使用arguments.callee 这意味着,我们无法在匿名函数内部调用自身(递归)了。

13.函数必须声明在顶层:将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。换句话说,不允许在非函数的代码块内声明函数。

14.不允许使用关键字
    为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。

你可能感兴趣的:(理解JavaScript严格模式的相关问题)