使用“use strict”和变量范围

时间:2012-05-07 02:02:28

标签: javascript scope strict

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

(function(){
  "use strict";

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

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

1 个答案:

答案 0 :(得分:8)

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

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

(function(){
    "use strict";

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

无论严格/非严格模式如何,this都不会引用使用文字符号创建的对象。这就是JavaScript的工作方式。