为什么这段代码不起作用?
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() {}
它会起作用。
我模拟了一些代码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() {}
它会起作用。