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

Why doesn't this block of code work?

我模拟了一些代码here

var common = common || {};

(function(NAMESPACE) {

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

  main();

})(common);

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

我想了解一些事情,

1) 为什么这行不通,我想这与作用域 "decided" 和 IIFE 的方式有关,但不完全确定。

2) 如何让这段代码生效?

作为名为 NAMESPACE 的参数传递的

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

所以 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!';
}

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

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

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

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

如果你说,

NAMESPACE.isIE = function() {}

它会起作用。