簡體   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