严格禁止在node.js中使用这个

使用后“使用严格”语句在我的JS文件不允许我之后IST级使用JavaScript 这个

'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
    }
  }
}

和Javascript:

  • 是默认引用全局对象。 (浏览器上的“窗口”)
  • 引用了调用对象的例子:

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

    这会向你显示对象本身。

  • 所以当你这样做时:

    ...
    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.
    }
    ...
    
  • 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();
        }
      };
    };
    

    this是未定义的,因为它不是自动绑定到严格模式下的对象。

    首先,以严格模式传递给函数的值不会被强制为一个对象(又名“盒装”)。 对于一个正常的函数,这总是一个对象:要么提供的对象,如果用一个对象赋值this来调用; 如果使用布尔值,字符串或数字调用此值,则装箱; 或者全局对象如果使用undefined或null调用。 (使用调用,应用或绑定来指定特定的这一点。)不仅自动装箱成为性能成本,而且暴露浏览器中的全局对象也是一种安全隐患,因为全局对象提供对“安全”JavaScript环境功能的访问必须限制。 因此,对于一个严格的模式函数,指定的这个不会被装入一个对象中,如果未指定,这将是未定义的

    阅读更多的MDN

    链接地址: http://www.djcxy.com/p/94907.html

    上一篇: use strict not allow use of this in node.js

    下一篇: Why is my variable undefined inside the Underscore.js each function?