2

我最近开始使用"use strict"我的脚本。我注意到的行为之一就是这个。[name of variable]不适用于对象。例如:

(function(){
  "use strict";

  window.person = {}
  person.name = {
    first: "first name",
    last: this.first
  }
}());

似乎严格的 js 不再允许它了。为什么要删除这个?有什么缺点吗?

4

1 回答 1

8

在没有任何隐式或显式上下文设置的情况下调用的函数中,this变为undefined.

如果您立即调用的函数的外部上下文是全局范围,并且这是您对其自身上下文的期望,您可以使用.call(this)将其上下文设置为外部上下文的上下文。

(function(){
    "use strict";

    window.person = {}
    person.name = {
        first: "first name",
        last: this.first
    }
}).call(this);

无论是严格/非严格模式,this都永远不会引用使用文字表示法创建的对象。这就是 JavaScript 的工作原理。

于 2012-05-07T02:09:23.440 回答