Javascript 为什么';这段代码行得通吗?

Javascript 为什么';这段代码行得通吗?,javascript,scope,iife,Javascript,Scope,Iife,我已经模拟了一些代码 我想了解一些事情 1) 为什么这不起作用,我想这与范围界定是如何“决定”和生活有关,但并不完全确定 2) 如何使此代码工作?common作为名为NAMESPACE的参数传递需要扩展,而不是分配新值 因此,Object.assign可以在这里提供帮助 var common = common|| {}; (function(NAMESPACE) { Object.assign(NAMESPACE,{ isIE: function() { retu

我已经模拟了一些代码

我想了解一些事情

1) 为什么这不起作用,我想这与范围界定是如何“决定”和生活有关,但并不完全确定


2) 如何使此代码工作?

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

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

当您在JS中将对象作为参数传递时,应该记住您是“按值”传递它的引用

用文字符号创建一个新对象并将其分配给参数,如下所示

NAMESPACE = {
    isIE: function() {
        return true;
    }
  };
只能将参数指向新对象,而不能指向传递参数的引用的对象

如果你说,

NAMESPACE.isIE = function() {}

它会起作用。

当您在JS中以参数形式传递对象时,您应该记住您是“按值”传递它的引用

用文字符号创建一个新对象并将其分配给参数,如下所示

NAMESPACE = {
    isIE: function() {
        return true;
    }
  };
只能将参数指向新对象,而不能指向传递参数的引用的对象

如果你说,

NAMESPACE.isIE = function() {}

它会起作用。

你想实现什么?@JesperHøjer好吧,上面的iife代表我的助手函数,它们被包装在iife中,当我尝试访问外部函数时,我会收到一个错误,说
common。isIE
是未定义的,因为你没有向“common”-对象添加任何内容?嗯,
函数main(…)
在IIFE之外。
main
使用您定义为
var common=common | |{}不是您创建的
命名空间
对象。(一旦将
名称空间
作为参数
x
指定给函数
main(x)
并使用
console.log(x.isIE());
你的调用有效。你想实现什么?@JesperHøjer好吧,上面的iLife代表我的助手函数,它们被包装在iLife中,当我尝试访问外部函数时,我收到一个错误,说
common.isIE
是未定义的,因为你没有向“common”-对象添加任何内容?嗯,
函数main(…)
在IIFE之外。
main
使用您定义的
common
变量common=common | |{};
而不是您创建的
NAMESPACE
对象。(一旦您将
NAMESPACE
作为参数
x
来运行
main(x)
,并使用
console.log(x.isIE());
你的呼叫有效。将
$扩展也有效吗?因为IE不支持
对象。分配
$。扩展
也有效吗?因为IE不支持
对象。分配