var number = 5;
var obj = {
number: 3,
fn1: (function () {
var number;
this.number *= 2;
number = number * 2;
number = 3;
return function () {
var num = this.number;
this.number *= 2;
console.log(num);
number *= 3;
console.log(number);
}
})()
}
var fn1 = obj.fn1;
fn1.call(null);
obj.fn1();
console.log(window.number);
// node环境中 -- NaN、9、3、27、5
// 浏览器环境--10、9、3、27、20
首先匿名自执行函数运行后,变为
var number = 5; var obj = { number: 3, fn1: function() { var num = this.number; this.number *= 2; console.log(num); number *= 3; console.log(number); } } // 此时 this.number *= 2; // this为window,所以window.number = 10; number = number * 2; // 那么,number为NaN number = 3; // number为3; // so window.number = 10; number = 3;
# 资料
一道经典的this面试题 (opens new window)