use strict不允许在node.js中使用它

时间:2016-04-26 07:44:06

标签: javascript node.js

使用'使用严格'在我的js文件中声明它不允许我在ist级别之后使用javascript this

'use strict'

module.exports = {
  a: function() {
    var self = this //works fine upto this level
    var name = 'atul';
    function b() {
      this.name = name; //gives me error as can not set property name of undefined
    }
  }
}

2 个答案:

答案 0 :(得分:1)

这个和Javascript:

  1. 默认情况下引用全局对象。 ("窗口"在浏览器上)
  2. 对调用对象示例的引用:

    var x = {name: "x", alphabet: function(){return this;}};
    x.alphabet(); // in this line, x is the calling object
    

    这将显示对象本身。

  3. 所以当你这样做时:

    ...
    a: function() {
      var self = this //works fine upto this level
      var name = 'atul';
      function b() {
        this.name = name; //use strict is trying to tell you something
      }// you won't have a calling object for this function.
    }
    ...
    
  4. use-strict说:这个函数甚至不是对象属性或方法。由于它不是一种方法,因此这个将指向全局对象并导致容易出错的开发。

    如果您希望以这种特殊方式使用您的代码。

    module.exports = {
      a: {
           name: 'atul';
           b: function (name) {
             this.name = name; // now you have a as the property which can be called by an object a.
             //To be used as OBJECT.a.b();
        }
      };
    };
    

答案 1 :(得分:-1)

this未定义,因为它未以严格模式自动装箱到对象。

  

首先,在严格模式下传递给函数的值不会强制成为对象(a.k.a。“boxed”)。对于普通函数,它始终是一个对象:如果使用对象值this调用提供的对象;如果使用布尔值,字符串或数字调用,则为盒装值;或者使用undefined或null调用全局对象。 (使用call,apply或bind来指定特定的。)不仅自动装箱会降低性能,而且在浏览器中暴露全局对象也存在安全隐患,因为全局对象提供了对“安全”JavaScript环境的功能的访问必须限制。因此,对于严格模式函数,指定的函数不会被装入对象中,如果未指定,则这将是未定义的

MDN

了解详情