Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 严格模式更改的规则是什么?_Javascript_Node.js - Fatal编程技术网

Javascript 严格模式更改的规则是什么?

Javascript 严格模式更改的规则是什么?,javascript,node.js,Javascript,Node.js,我有几个节点JS模块,一些使用严格模式,其他不使用 从严格模式模块调用到非严格模式模块时,模式如何更改?在这样的通话中,模式是如何变化的 反之亦然,从非严格模式模块调用严格模式模块中的方法时,更改模式的逻辑是什么 一般来说,更改严格模式的规则是什么,特别是对于NodeJ的规则是什么?它是如何工作的?代码被解析、编译(在相关的地方)并以编写它的模式执行,而不管它是从什么模式调用的。只有在调用函数时才能跨越这两种模式之间的界限,这就产生了一个问题,即使用哪种模式来进行调用?(因为严格模式影响调用函数

我有几个节点JS模块,一些使用
严格模式
,其他不使用

从严格模式模块调用到非严格模式模块时,模式如何更改?在这样的通话中,模式是如何变化的

反之亦然,从非严格模式模块调用严格模式模块中的方法时,更改模式的逻辑是什么

一般来说,更改严格模式的规则是什么,特别是对于NodeJ的规则是什么?它是如何工作的?

代码被解析、编译(在相关的地方)并以编写它的模式执行,而不管它是从什么模式调用的。只有在调用函数时才能跨越这两种模式之间的界限,这就产生了一个问题,即使用哪种模式来进行调用?(因为严格模式影响调用函数的几个方面。)答案是:被调用函数的模式。因此,当松散函数调用严格函数时,会使用函数调用的严格规则;当严格函数调用松散函数时,将使用函数调用的松散规则

调用函数时,严格模式以多种方式发挥作用:

  • 在严格模式下,调用可以指定
    为非对象值;在松散模式下,任何非对象都被强制为对象
  • 在严格模式下,对于没有指定它的调用(例如:
    foo()
    ),默认的
    this
    未定义的
    ,而不是处于松散模式的全局对象
  • 在严格模式下,被调用函数的
    参数
    对象具有
    调用者
    被调用者
    属性,这些属性在访问时抛出
    类型错误
    ;在松散模式下,规范将
    参数.被调用方
    定义为对被调用函数的引用;规范中没有
    参数。caller
    ,但是一些实现提供了对其上调用函数的引用
  • 事实上,在严格模式代码中,
    参数
    的特定于实现的扩展(如
    调用方
    )是被禁止的,而在松散模式下则是允许的
  • 由调用创建供被调用函数使用的
    参数
    对象在严格模式下与函数的命名参数完全断开关联,而不是像在松散模式下那样动态链接到这些参数
  • 下面是一个松散函数调用严格函数和严格函数调用严格函数的示例,说明被调用函数的规则是遵循的规则:

    //松散调用严格
    常量strictFunction1=(函数(){
    “严格使用”;
    返回函数(a,b){
    log(“==调用的严格函数:”);
    console.log(“#1和#2”,typeof this);//未定义
    console.log(“#2”,this==window);//false
    试一试{
    const x=arguments.callee;
    log(“#3”,“尝试访问`arguments.callee`的结果:得到了一个”+typeof x);
    }捕获(e){
    console.log(“#3”,“尝试访问`arguments.callee`:”+e.message)的结果);
    }
    // #5:
    a=42;//设置“a”
    console.log(“#5”,a===参数[0]);//false
    };
    })();
    函数1(){
    1(67);
    }
    功能1();
    //严打松绑
    常量函数2=(函数(){
    返回函数(a,b){
    log(“==调用的松散函数:”);
    console.log(“#1和#2”,typeof this);//对象
    console.log(“#2”,this==window);//true
    试一试{
    const x=arguments.callee;
    log(“#3”,“尝试访问`arguments.callee`的结果:得到了一个”+typeof x);
    }捕获(e){
    console.log(“#3”,“尝试访问`arguments.callee`:”+e.message)的结果);
    }
    // #5:
    a=42;//设置“a”
    console.log(“#5”,a===参数[0]);//true
    };
    })();
    函数strictFunction2(){
    2(67);
    }
    严格功能2()
    
    。作为控制台包装器{
    最大高度:100%!重要;
    
    }
    我想你可以在这里@brielga了解你的anwser的一部分——所有这些都是关于严格模式是什么,而不是关于它如何在上下文中变化,这正是我试图理解的。