如何编写通用JS函数检测调用位置是否处于严格模式?
为什么你的代码返回两个false
你写的检测函数不生效有两个核心原因:
"use strict"本身只有声明在全局作用域顶部、或者函数体顶部的时候才会生效,写在普通块{}的开头对块内代码没有约束效果,你例子里的块级严格模式声明本身就是无效的。- 函数内部的
this绑定规则、严格模式判定都由函数自身定义时的上下文严格模式决定,和调用位置的严格模式没有关系。你定义的is_strict函数本身是在非严格模式下创建的,所以无论你在哪调用它,直接调用时this都会指向全局对象,永远返回false。
能不能写通用的调用位置严格模式检测函数?
做不到。所有独立定义的函数,自身的严格模式状态在定义时就已经固定,内部代码的运行规则完全不受调用位置影响,根本无法读取调用位置的严格模式状态。
目前唯一可行的检测方式就是你提到的行内执行IIFE:
// 直接写在需要检测的位置,就能正确返回当前位置是否为严格模式 const isCurrentStrict = (function() { return this === undefined })();
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

