Javascript Douglas Crockford的严格模式示例是否错误?
我肯定他没有。我只是不懂他演讲中的一个例子 和这件不一样吗Javascript Douglas Crockford的严格模式示例是否错误?,javascript,strict,Javascript,Strict,我肯定他没有。我只是不懂他演讲中的一个例子 和这件不一样吗 function in_strict_mode() { return !this; } 如果是_strict_mode()我会方法那么我会同意,因为这个会指向包含方法的对象,例如 my_object.in_strict_mode = function() { return (function () { return !this; }()); } 但是他为什么在他的例子中这样做(这是一个简单的
function in_strict_mode() {
return !this;
}
如果是_strict_mode()
我会方法
那么我会同意,因为这个
会指向包含方法的对象,例如
my_object.in_strict_mode = function() {
return (function () {
return !this;
}());
}
但是他为什么在他的例子中这样做(这是一个简单的函数,不是一个对象的方法)?这个的值取决于函数的调用方式。函数(Crockford代码中的“匿名”,但在您的代码中为“仅”)通过查看
this
的值来确定是否启用了严格模式,并要求在没有显式上下文的情况下调用该函数,以使其正常工作
在严格模式下如何调用Crockford的函数无关紧要,因为它使用不同的函数来实际获取所关心的数据
在_strict _mode
函数中如何调用确实很重要,因为它使用自身来获取数据
Crockford版本旨在提供正确的结果,即使您将其用作对象上的方法,或使用apply(something)
或call(something)
调用它,显示的函数将双向工作。。。i、 你可以把它放在一个“名称空间”中,并且仍然会告诉你是否处于严格模式
简化版返回!如果将此
放在命名空间中并在_strict _mode()中使用mylib
此函数可以根据调用方式返回不同的结果。请记住,此
上下文由函数调用而不是函数定义决定。因此:
in_strict_mode.call(new Object()) === false
Crockford的版本定义并立即调用内部函数,因此它可以控制内部函数调用中的上下文。因此,他的在_strict_模式下
不能被诱使返回其他内容。使用不同的上下文调用它
function in_strict_mode() {
return !this;
}
in_strict_mode.call(new Object()) === false