ES5严格模式下有哪些新规定

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/suandfei/article/details/101984426

如何启用严格模式:在js运行顶端加上 “use strict” 注意是字符串

1.禁止给未声明的变量赋值

js 如果给未声明的变量会自动把这个变量加载到全局作用域下,这样导致的后果 造成全局污染 在严格模式下会报错禁止给未声明的变量强行赋值,报错: xxx is not defined。——防止全局污染,也减少了拼写错误导致的误会

2.静默失败升级为错误

什么叫静默失败 就是有错误也不会报错,但是在严格模式下会报错便于我们快速发现问题

3.普通函数中this的指向问题

一般来说调用一个函数 如果函数体内出现 this.a 代码执行到这里的时候this的指向问题 this 指的是window 例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
      <script>
      
         (function(){
             this.a=5;
             console.log(a)
         })()// **首先匿名函数自调用执行函数里面的代码 执行到this.a 因为在当前的临时作用域对象没有a  因为this.a 是相当于在全局添加了一个a d但是在严格模式下会报错**
        
      </script>
</body>
</html>

4. 禁用了arguments.callee 属性

function f(n){
  if(n<3){
    return 1;
  }else{
    return arguments.callee(n-1)+arguments.callee(n-2);
  }//   arguments.callee 代表的是函数名  一般用在递归中 为什么禁用 因为递归算法不好 重复量太大

猜你喜欢

转载自blog.csdn.net/suandfei/article/details/101984426