[英]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.