任何人都可以解释为什么这个 IIFE 传入的参数会像它对未定义的方式那样改变作用域内的变量吗?

Can anyone explain why this IIFE passed in argument mutates in-scope variable the way it does to undefined?

还有其他不涉及 undefined 的情况会导致这种突变吗?我很难理解这个例子:

(function(undefined){
var str = 'foo';
console.log(str === undefined); // true
})('foo');

undefined 是一个您可以在严格模式之外重新分配的变量,尽管严格模式显然不会保护您免于以这种方式命名参数。

console.log(typeof undefined);
(function(undefined){
var str = 'foo';
console.log(str === undefined); // true
console.log(typeof undefined);
})('foo');