Javascript 为什么“this”不指向窗口对象?

Javascript 为什么“this”不指向窗口对象?,javascript,Javascript,在浏览器中,在iLife中,该对象应指向窗口对象。然而,在这种情况下,它是未定义的 (function () { "use strict"; console.log(this) // undefined // more stuff }()); 仅在ECMAScript 5的严格模式下,当其值未定义或为空时,即不在对象范围内或显式设置时,这将不会从函数范围返回全局对象 调用函数时实际发生的情况如下-ThisBinding是调用函数时this值的行话 10.4.3输

在浏览器中,在iLife中,该对象应指向窗口对象。然而,在这种情况下,它是未定义的

(function () {

    "use strict";

    console.log(this) // undefined

    // more stuff

}());

仅在ECMAScript 5的严格模式下,当其值未定义或为空时,即不在对象范围内或显式设置时,这将不会从函数范围返回全局对象

调用函数时实际发生的情况如下-ThisBinding是调用函数时this值的行话

10.4.3输入功能代码

当控件为函数对象F、调用方提供的thisArg和调用方提供的ArgumentList中包含的函数代码输入执行上下文时,将执行以下步骤:

一,。如果函数代码是严格代码,请将ThisBinding设置为thisArg。 2.否则,如果thisArg为null或未定义,请将ThisBinding设置为全局对象

如果需要全局对象,可以使用在全局范围中定义的全局变量,或者使用一些技巧,例如使用立即调用的新函数1


1:除非函数有pragma“use strict”,否则使用新函数不会进入严格模式;在新函数本身的主体中。

以严格模式显式传递全局对象的一种方法是使用callthis

从,在安全JavaScript下

首先,在严格模式下传递给函数的值不是 被装进一个物体里。对于普通函数,这始终是一个对象: 所提供的对象(如果使用此值的对象调用);价值,, 已装箱,如果使用布尔值、字符串或此数字调用;还是全球 对象,如果使用未定义的或空值调用此。使用call、apply或 绑定以为此指定特定的。自动拳击是一种表演 但在浏览器中公开全局对象是一种安全隐患, 因为全局对象提供对安全功能的访问 JavaScript环境必须限制。因此,对于严格的模式 函数,指定的值将在未更改的情况下使用:

例如:


我想他的意思是,在正常模式下,函数至少有窗口作用域,但在严格模式下并没有。这是因为回调不应该使用这个。此函数不与任何对象相关,也不为任何对象调用。阅读关于严格模式:。@Juhana哇,我不知道!非常感谢
(function(){

    "use strict";

    console.log(this) // this points to window

    // more stuff

}).call(this);
"use strict";
function fun() { return this; }
assert(fun() === undefined);
assert(fun.call(2) === 2);
assert(fun.apply(null) === null);
assert(fun.call(undefined) === undefined);
assert(fun.bind(true)() === true);