繁体   English   中英

Douglas Crockford对Strict Mode示例有错吗?

[英]Was Douglas Crockford wrong with Strict Mode Example?

我敢肯定他不是。 我只是不明白他的演讲中的一个例子

http://youtu.be/UTEqr0IlFKY?t=44m

function in_strict_mode() {
    return (function () {
        return !this;
    }());
}

这个不一样吗?

function in_strict_mode() {
    return !this;
}

如果is_strict_mode()是我的method那么我同意,因为this将指向包含对象的方法,例如

my_object.in_strict_mode = function() {
    return (function () {
        return !this;
    }());
}

但是为什么他在他的例子中做到了(这是一个简单的函数,而不是一个对象的方法)?

this取决于函数是如何被调用。 该(“匿名”在Crockford的代码,但“只”在你的)功能确定严格模式是通过看的价值this并要求功能时,能够对工作明确上下文中调用。

你如何调用Crockford的in_strict_mode函数并不重要,因为它使用不同的函数来实际获取它关心的数据。

调用in_strict_mode函数的方法很重要,因为它使用自身来获取数据。

Crockford版本旨在提供正确的结果,即使您将其用作对象上的方法或使用apply(something)call(something)来调用它。

显示的功能将同时工作...即,您可以将其放在“命名空间”中,并且仍会告诉您是否处于严格模式。

简化版本return !this如果放在命名空间中并使用mylib.in_strict_mode()调用,则不会返回正确的结果。

function in_strict_mode() {
    return !this;
}

根据您的调用方式,此函数可以返回不同的结果。 请记住, this上下文由函数调用确定,而不是函数定义 因此:

in_strict_mode.call(new Object()) === false

Crockford的版本定义并立即调用内部函数,因此它可以控制内部函数调用中的this上下文。 因此,他的in_strict_mode不能被欺骗,被返回别的东西.call用不同的荷兰国际集团就this方面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM