精华内容
下载资源
问答
  • 严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强。这篇文章主要介绍了Javascript 严格模式use strict详解 ,需要的朋友可以参考下
  • ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行; 一、主要作用: 消除版本javascript中一些不合理及不严谨之处,减少怪异行为 提高编译效率,提高运行速度 ...

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行;

    一、主要作用:

    1. 消除版本javascript中一些不合理及不严谨之处,减少怪异行为
    2. 提高编译效率,提高运行速度
    3. 为新版本的javasript做铺垫兼容

    二、如何使用
    启动严格模式的标志就是,在开头第一行中添加"use strict"字符串,在低版本的浏览器,或是说js引擎中,只是把这个标志当做一句字符串而已,而支持ES5的浏览器会进行启动“严格模式”;具体有两种调用方式:

    1、针对整个脚本文件有效
    在js文件的第一行中添加"use strict",或是在<script>标签中第一行添加标志,则所有后面的语句在严格模式下进行执行;注意,所谓的第一行,表示在 "use strict" 语句之前没有可执行的有效语句(可以在空的分号后面);当使用合并压缩工具时,就要特别注意;

    <script type="text/javascript"> 
        "use strict";
        // 严格模式
        // do something
        
    </script>
    
    <script type="text/javascript"> 
        // 非严格模式
        // do something
        
    </script>

    2、针对单个函数有效
    将 "use strict" 放在函数的第一行,则整个函数有效

    function strict(){
        "use strict";
         // 严格模式
        // do something
    }

    3、更加通用的写法,由于第一种方法,不利于文件的合并,根据针对函数的形式,可以将脚本文件包裹在一个自执行的匿名函数中,这样相当于所有语句都在一个严格模式的函数中执行

    (function(){
        "use strict";
        // 严格模式
        // do something
    }())

    三、语法与行为变更

    1、全局变量的显示声明
    正常模式下,对于使用没有进行声明的变量,编译时默认改变量为全局变量(添加到window对象的属性中,可以使用delete进行删除),而严格模式下进行了限制,使用变量前必须声明(var/let/const);

    function strict(){
        "use strict";
         name = "ukerxi";
         console.log(name);
    }
    
    function noStrict(){
         name = "ukerxi";
         console.log(name);
    }
    
    // 执行函数
    strict(); // 报 Uncaught ReferenceError: name is not defined(引用错误)
    noStrict(); // ==> 'ukerxi'

    2、禁止使用with语句
    正常模式下with语句允许当前代码执行在新的变量对象中,即改变了执行环境;在严格模式下,已经禁止使用with语句,由于只有运行时才知道语句的执行环境,所以执行非常耗时缓慢;

    var foo = {
      name: "ukerxi",
      hobby: 'no'
    };
    
    with(foo){
      console.log(name); // ==> 'ukerxi'
    }

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

    "use strict";
    var name = 'ukerxi';
    eval('var name = "originEval";');
    console.log(name); // ==> "ukerxi"

    但是存在一种情况,就是当你使用变量进行缓存eval函数时,再使用缓存变量进行执行操作,会产生正常模式下执行eval函数的效果(暂时不知道这个bug是语言本身的设计,还是其他原因导致的)

    "use strict";
    var name = 'ukerxi';
    var globalEval = eval; // 缓存一个全局的eval函数
    eval('var name = "originEval";');
    console.log(name); // ==> "ukerxi" 
    
    // 使用缓存进行执行函数,会导致变更作用域
    globalEval('var name = "globalEval";');
    console.log(name); // ==> "globalEval"

    4、禁止this执行全局对象,默认指向undefined

    "use strict";
    console.log(this); // ==> undefined

    5、禁止使用arguments.caller和arguments.callee进行调用自身及被调用函数

    "use strict";
    function testHandle(){
        console.log(arguments.caller); // 报错
        console.log(arguments.callee); // 报错
    }

    6、禁止修改arguments变量参数对象,arguments不再追踪参数的变化

    "use strict";
    function testHandle(){
       arguments = "test"; // 报语法错误
    }

    7、禁止删除变量

    "use strict";
    var name = "ukerxi";
    delete name; // 报错

    8、重名错误(函数参数重名&&对象重名属性)

    "use strict";
    // 属性重名报错
    var testObj = {
        name: "ukerxi",
        name: "test"
    };
    
    // 参数重名报错
    function testHandle(a, a, b){
        // do something
    }
    

    9、禁止八进制表示法

    "use strict";
    var n = 0100; // 语法错误

    10、函数必须声明在顶层
    Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数

    "use strict";
    if (true) {
      function f() { } // 语法错误
    }
    for (var i = 0; i < 5; i++) {
      function f2() { } // 语法错误
    }

    11、针对对象的操作,对于声明只读属性的对象不可修改,删除不可删除的属性报错

    "use strict";
    var foo = {};
    // 只读属性的对象不可修改
    Object.defineProperty(foo, "v", { value: 1, writable: false });
    foo.v = 2; // 报错
    
    // 删除不可删除的属性报错
    delete Object.prototype; // 报错
    
    // 严格模式下,对一个使用getter方法读取的属性进行赋值,会报错
    var foo1 = {
      get v() { return 1; }
    };
    foo1.v = 2; // 报错
    
    
    // 严格模式下,对禁止扩展的对象添加新属性,会报错。
    var foo2 = {};
    Object.preventExtensions(foo2);
    foo2.v = 2; // 报错

    12、保留字
    为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。(主要是与类有关的保留字,和java类的关键字)

    展开全文
  • 严格模式:'use strict’ 1.在&lt;script&gt;里面的第一行写'use strict';,表明下面代码都是使用严格模式 2.使代码的定义、使用更加规范,避免一些诡异的运行行为 3.在后续的ES特性和一些Angular等JS框架中...

    严格模式:'use strict’

    1.在<script>里面的第一行写'use strict';,表明下面代码都是使用严格模式
    2.使代码的定义、使用更加规范,避免一些诡异的运行行为
    3.在后续的ES特性和一些Angular等JS框架中,要求必须要在严格模式下运行
    4.使代码的编译和运行更加高效(避免代码产生一些不必要的麻烦)

    对变量的影响

    1、变量必须要先声明再使用

    i = 10; // 严格模式:抛ReferenceError异常
    console.log(i); // 非严格模式:正常声明,正常打印
    

    2、不可以使用implements,interface,let,package,private等保留字/关键字作为变量名

    var private = 100; // 严格模式:抛SyntaxError异常 非严格模式:正常声明
    

    3、严格模式不再允许用户删除变量

    var i = 10;
    console.log(delete i);	// 严格模式:抛SyntaxError异常  非严格模式:false
    console.log(i);			// 非严格模式:10
    

    对对象的影响

    1、为只读属性赋值会抛出TypeError
    2、对不可配置的属性使用delete 操作符会抛出TypeError
    3、对不可扩展的对象添加属性会抛出TypeError
    4、不可以使用with简化对象访问(为什么?)

    var obj = {id: 1, name: "Tom"};
    with(obj) {
    	// 这里addr属性有歧义
    	addr = "nanjing"; // 严格模式:抛SyntaxError异常,所以后面的不走了
    	name = "Sophia";
    	document.write(id);	// 非严格模式:1
    	document.write(name); // 非严格模式:Sophia
    	document.write(addr); // 非严格模式:nanjing
    }
    document.write(obj.name); // 非严格模式:Sophia
    console.log(obj.addr); // 非严格模式:undefined
    

    对函数的影响

    1、在普通函数中,不允许使用this引用当前windows对象

    function test() {
    	console.log(this);	// 严格模式:undefined 非严格模式:输出window对象
    }
    test();
    

    2、在严格模式中,函数的参数必须唯一

    // 非严格模式:没有错误,只能访问第二个参数,如果要访问第一个参数,就必须通过arguments
    function sum(num,num){ // 严格模式:抛SyntaxError异常
    	console.log(num); // 非严格模式:2
    	console.log(arguments[0]); // 非严格模式:1
    }
    sum(1,2);
    

    3、在严格模式下arguments对象的行为也有所不同.在严格模式下,修改命名参数的值也会反映到argument对象中,但是在严格模式下这两个值是完全独立的

    function showValue(value){
    	value = 'foo';
    	console.log(value); // 严格模式:foo 非严格模式:foo
    	console.log(arguments[0]); // 严格模式:hello  非严格模式:foo
    }
    showValue('hello')
    

    4、eval函数最大的变化就是他在包含上下文中不在创建变量或者函数

    var str = "var j = 100";
    eval(str);
    console.log(j);	 // 非严格模式:100 严格模式:j is not defined
    

    5、只要在<script>中声明了严格模式,那么所有在此<script>中声明的函数也适用严格模式!如果<script>中不声明严格模式,函数的方法体中也可以自己声明,只对改方法里面起作用。

    function test() {
    	"use strict";
    	  i = 10; // 属于严格模式范围 i is not defined
    }
    a = 20; 
    console.log(a); // 属于非严格模式范围 20
    test();
    

    获取视频:阅读原文

    个人公众号:
    在这里插入图片描述

    展开全文
  • 该错误提示你:配置了js需要使用严格模式的eslint规则,但代码中并声明严格模式,即use strict; 一般这个问题出现在node.js的代码中,因为node.js代码使用commonjs的规范。如果想使用严格模式,需要手动声明: "use ...

    该错误提示你:配置了严格模式的eslint规则,但代码中并声明严格模式,即并未使用use strict;

    一般这个问题出现在node.js的代码中,因为node.js代码使用commonjs的规范。如果想使用严格模式,需要手动声明:

    "use strict";
    
    // strict mode
    
    function foo() {
        // strict mode
    }
    
    // 或者在函数内部声明
    function foo() {
        "use strict";
        // strict mode
    }
    
    function foo2() {
        // not strict mode
    };
    
    (function() {
        "use strict";
        function bar() {
            // strict mode
        }
    }());
    

    而对于浏览器端,因为会使用ES module,默认就是严格模式,所以无需手动声明。因此不会遇到这个问题。

    展开全文
  • 前端开源库-use-strict

    2019-08-29 22:10:14
    前端开源库-use-strict使用strict,使节点中的所有模块都以strict模式加载。
  • 主要介绍了JavaScript 严格模式(use strict)用法,结合实例形式分析了JavaScript 严格模式的基本功能、用法及操作注意事项,需要的朋友可以参考下
  • 'use strict' :“严格模式”。就是Js代码运行时,自动地实现更严格的解析和错误处理方法。   优点:消除js代码中不严谨、不合理的地方;提高代码的质量,保证代码更安全地运行;压缩时,js文件体积会更小。 ...

    'use strict' :“严格模式”。就是Js代码运行时,自动地实现更严格的解析和错误处理方法。

     

    优点:消除js代码中不严谨、不合理的地方;提高代码的质量,保证代码更安全地运行;压缩时,js文件体积会更小。

    缺点:现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节;压缩时,又可能会出现错误。

    展开全文
  • Mobx useStrict is not a function

    万次阅读 2018-04-09 09:58:50
    mobx@4.x 之后的严格模式改成这么用了~ 。 这两天找的到的项目,要么是用的mobx@3.x 要么是没有用严格模式,一开始我也没查到迁移说明,贴个地址,希望下次有人遇到的时候不用浪费时间找。 Migrating from mobx 3 ...
  • 1、介绍严格模式 2、严格模式影响范围 变量: var、delete、变量...ECMAScript 5 引入严格模式('strict mode')概念。通过严格模式,在函数内部选择进行较为严格的全局或局部的错误条件检测,使用严格模式的好处是...
  • use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。 “use strict” 的目的是指定代码在严格条件下执行。 支持严格模式的...
  • use strict”的作用是什么?

    千次阅读 2020-03-24 10:49:08
    use strict 出现在 JavaScript 代码的顶部或函数的顶部,可以帮助你写出更安全的 JavaScript 代码。如果你错误地创建了全局变量,它会通过抛出错误的方式来警告你。例如,以下程序将抛出错误: function ...
  • js常见的六种报错类型 EvalError: eval()的使用与定义不一致 RangeError: 数值越界 ReferenceError: 非法或不能识别的引用值 ...es5严格模式(’use strict’) 1.‘use strict’ 不在兼容es3的一些不规则语法,使用全
  • babel @babel/core @babel/preset-env Babel 6.x 和 grunt-babel v7 npm i --dev grunt-babel@7 babel-core babel-preset-env 可以看到grunt-babel有两种版本的安装方式,那么对应这两种版本,去掉use strict的方式...
  • 普通模式的变量、for循环中的变量可以不用var声明,严格模式必须使用var声明变量。 禁掉了with关键字。 普通模式eval的作用域:eval在全局作用域,就是全局;eval在函数内部,就是局部作用域。...
  • JavaScript 严格模式(use strict) JavaScript 严格模式(strict mode)即在严格的条件下运行。 使用 “use strict” 指令 “use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是...
  • use strict

    2016-03-24 16:35:20
    除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立"严格模式"的目的,主要有以下几个:  - 消除Javascript...
  • 什么是“use strict”,好处和坏处

    万次阅读 多人点赞 2018-05-30 20:07:16
    usestrict’: "严格模式"是一种在JavaScript代码运行时自动实行更严格解析和错误处理的方法。这种模式使得Javascript在更严格的条件下运行。设立"严格模式"的目的,主要有以下几个:1. ...
  • "use strict" 的意义和好处

    千次阅读 2018-09-10 11:35:24
    use strict" 严格模式主要有以下限制: 变量必须声明后再使用 函数的参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀0表示八进制数,否则报错 不能删除不可...
  • Perl中use strict

    千次阅读 2015-10-25 01:02:19
    use strict是Perl中编译指令,是提供给Perl编译器的指令,告诉编译器,如果perl代码中有不好的编码风格,那么提示编译失败。也就是说,加上use strict后,我们的Perl代码的编写必须遵循一些规范,否则编译器会报错。...
  • "use strict"; 被放在一个 JavaScript 文件或函数的起始位置时 (我不确定 script 标签开头是否可以),才可以开启严格模式。否则 - 在 JavaScript 文件的不是文件开头也不是函数开始的部位声明的话 - 就是一个不使用...
  • Javascript 严格模式(use strict)详解

    千次阅读 2016-03-16 16:47:58
    一、概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式”的目的,主要有以下几个: 消除...
  • use strict 使用方法-简单说

    千次阅读 2017-11-14 15:00:53
    define([ 'require', 'jquery'//依赖jquery ], function (require, $) { 'use strict'; return { jquery: $, f1: 'hello', m1: fureturnnction () { 'world'; } } }); "use strict
  • 针对node.js的项目,在使用npm install时候,出现SyntaxError: Use of const in strict mode;的报错,通过查看node版本,发现此时系统版本为v0.12.7,因为node.js项目中采用了ES6或ES7最新的语法,使用了类似于const...
  • use strict"严格模式主要有以下限制:变量必须声明后再使用函数的参数不能有同名属性,否则报错不能使用with语句不能对只读属性赋值,否则报错不能使用前缀0表示八进制数,否则报错不能删除不可删除的属性,...
  • 概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。为什么用严格模式 消除Javascript语法的一些不合理、不严谨之处,...
  • ECMAScript 5中的严格模式(“use strict”)修正了语言的重要缺陷,并提供健壮的查错功能和增强的安全机制。 严格模式和非严格模式的区别如下(前三条尤为重要) 在严格模式中禁止使用with语句(临时添加对象到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,277
精华内容 39,710
关键字:

strictuse