Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 Douglas Crockford的严格模式示例是否错误?_Javascript_Strict - Fatal编程技术网

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