How does “use strict” modify the rules for “this” in Javascript?

前端 未结 1 1807
再見小時候
再見小時候 2020-12-21 12:43

I\'m trying to understand what rule for \"this\" that \"use strict\"; modifies in the below case.

After reading (http://unschooled.org/2012/03/understanding-javascri

相关标签:
1条回答
  • 2020-12-21 12:59

    That's almost correct. In strict mode, when a function is invoked without a receiver then this is undefined (not null). A better version of that function would be:

    function isStrict() {
      "use strict";
      return (typeof this) === 'undefined';
    }
    

    An inherent problem with functions like that is that "strictness" is determined lexically, like scope, so it's static. A tester function that includes its own "use strict"; isn't very useful; it really only tells you whether the JavaScript runtime understands strict mode. One without its own "use strict"; tells you whether the lexical context in which it's defined is in strict mode. That is:

    function isStrict() {
      function test() {
        return (typeof this) === 'undefined';
      }
      return test();
    }
    

    will tell you, when called, whether a "use strict"; was in effect for the scope at which the function is defined. I guess that could be useful. However, if a reference to that function "leaks" into some other context whose "strictness" differs, it's going to continue to report on its static strictness at the point of its definition.

    Personally, I would opt for simply ensuring that my code is definitely in strict mode by invoking "use strict"; at the outermost layer possible. That way there's really no need to check for it.

    0 讨论(0)
提交回复
热议问题