为什么这段代码不起作用?

时间:2016-06-21 10:54:46

标签: javascript scope iife

我嘲笑了一些代码here

var common = common || {};

(function(NAMESPACE) {

  NAMESPACE = {
    isIE: function() {
        return true;
    }
  };

  main();

})(common);

function main() {
    console.log(common.isIE());
  return 'Hello, World!';
}

我想了解一些事情,

1)为什么这不起作用,我想这与确定范围如何"决定"有关。和IIFE,但不完全确定。

2)如何使这段代码有效?

2 个答案:

答案 0 :(得分:5)

作为名为common的参数传递的

NAMESPACE需要扩展而不是分配新值。

所以Object.assign可以提供帮助。

var common = common|| {};

(function(NAMESPACE) {

  Object.assign(NAMESPACE,{
    isIE: function() {
        return true;
    }
  });

  main();

})(common);

function main() {
    console.log(common.isIE());
  return 'Hello, World!';
}

答案 1 :(得分:0)

当你在JS中传递一个对象作为参数时,你应该记住你正在传递“by-value”它的引用。

以文字符号创建一个新对象,并将其分配给这样的参数,

NAMESPACE = {
    isIE: function() {
        return true;
    }
  };

只能将参数指向新对象 - 而不是指向您传递参数的引用的对象。

如果你说过,

NAMESPACE.isIE = function() {}

它会起作用。