I m trying to understand what rule for "this" that "use strict"; modifies in the below case.
http://unschooled.org/2012/03/understanding-javascript-this/
http://unschooled.org/2012/03/understanding-javascript-this/
http://www.novogeek.com/post/ECMAScript-5-Strict-mode-support-in-browsers-What-does-this-mean.aspx
http://www.novogeek.com/post/ECMAScript-5-Strict-mode-support-in-browsers-What-does-this-mean.aspx
function isStrictMode(){
return !this;
}
//returns false, since this refers to global object and !this becomes false
function isStrictModeOn(){
"use strict";
return !this;
}
//returns true, since in strict mode, the keyword this does not refer to global object, unlike traditional JS. So here, this is null and !this becomes true.
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.
http://stackoverflow.com/questions/17150951/how-does-use-strict-modify-the-rules-for-this-in-javascript