var num1 = 1, num2 = 2; function cal() { var num1 = 10, num2 = 20; console.log('this', this); console.log('----------'); console.log('this.num1', this.num1); console.log('----------'); console.log(this.num1 + this.num2); } var calBind = cal.bind({ num1: 100, num2: 200 }); new cal(); cal(); new calBind(); calBind(); // NaN // new 创建对象,此时的 this 指向 cal , 但 var num1 并不是定义 this.num1 。所以最后就是 undefined + undefined = NaN // 3 // 此时的 this 指向外部 window ,window 中定义了 var num1 = 1, var num2 = 2; // node 跑出来的结果是 NaN;浏览器跑出来的结果是 3 // NaN // new 创建对象,此时的 this 还是指向 cal ,undefined + undefined = NaN // 300 // bind 绑定函数 this ,此时 100 + 200 = 300