Javascript 确定在非严格模式下是否使用null、未定义或全局对象调用函数
每当使用Javascript 确定在非严格模式下是否使用null、未定义或全局对象调用函数,javascript,Javascript,每当使用null/undefined调用非严格模式下的特定函数时,我希望抛出TypeError。通过强制函数在严格模式下本地执行,有一个局部解决方案,但这是一个不完整的解决方案 var t=函数{console.log(this)}; t、 call(null),t.call(未定义);//窗户,窗户 (功能(){ “严格使用”; t=函数{console.log(this)} t、 call(null),t.call(未定义);//null,未定义 })(); 如果此是窗口,我也无法抛出,因
null
/undefined
调用非严格模式下的特定函数时,我希望抛出TypeError
。通过强制函数在严格模式下本地执行,有一个局部解决方案,但这是一个不完整的解决方案
var t=函数{console.log(this)};
t、 call(null),t.call(未定义);//窗户,窗户
(功能(){
“严格使用”;
t=函数{console.log(this)}
t、 call(null),t.call(未定义);//null,未定义
})();
如果
此
是窗口
,我也无法抛出,因为该函数可以合法地使用此
作为全局对象调用。是否有一个不涉及使用strict
的完整解决方法?在草率模式函数中不可能获得原始null
或未定义的此参数。必须以严格模式1包装函数
请注意,调用位置的严格性并不重要,重要的是函数的定义。你想要
函数t(){
“严格使用”;
// ^^^^^^^^^^^^^
console.log(这个)
};
//在草率模式下调用:
t(),t.call(null),t.call(未定义);//未定义的,空的,未定义的
(功能(){
“严格使用”;
//严格模式下的调用:
t(),t.call(null),t.call(未定义);//未定义,null,未定义
})();
是否可以选择包装函数t
以生成修改后的函数?例如:t=wrap(t)
,那么你可以正常使用t
,除非当你用null
调用它时它会抛出,或者undefined
不会wrap
有与t
相同的问题吗?也就是说,您无法区分是使用null
、undefined
还是window
调用它。如果您返回一个修改过的函数,并在调用时执行一些检查,那么您可以更改行为:这非常聪明。也许你应该回答这个问题;-)为什么您不想对该函数使用严格模式呢?我看不出你的解决方案有什么不完善之处。