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