IIFE内name提升与window.name的输出题

var name = 1;
(function() {
  console.log(name + this.name); // browser: -> 'undefined1'; Node.js: -> NaN
  var name = '2';
  console.log(name + this.name); // browser: -> '21'; Node.js: -> '2undefined'
})();

这里有一个需要留意的细节, 在浏览器环境下 name 是 window 对象下的一个属性, 用 var 声明 name 为任意值, 都会将这个值转为 string 类型并更新 window.name. 因此在上述代码中, 一旦浏览器执行 console.log(name + this.name); 会输出 'undefined1'

但实际上在 js 中, 输入 undefined + 1; // -> NaN