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