面接問題:(クローズドテスト、this指向、事前解析、関数実行順序などの知識点)


実例(コメント版なし)
var num = 20;
var obj = {
    num : 30,
    fn : (function (num) {
        this.num *= 3;
        num += 15;
        var num = 45;
        return function () {
            this.num *= 4;
            num += 20;
            console.log(num);
        }
    })(num)
};
var fn = obj.fn;
fn();
obj.fn();
console.log(window.num, obj.num);
正解とは限りません.ご参考までに、足りないところはお知らせください.
1,コール関数のthisはwindow 2を指します.関数としてどんな関数でも呼び出すと、thisはwindow 3を指します.
var num = 20;//        
var obj = {//      obj  。
    num: 30,
    fn : (function (num) {
        console.log(this);//      this  window
        console.log(this.num);//   num 20
        this.num *= 3;//       window.num=60
        console.log(this.num);//60
        console.log(num);//20---  num     ,             ,
        num += 15;
        console.log(num);//     num=35
        var num = 45;//console.log(num);//  num=45
        console.log(666);
        return function () {
            console.log(this);
            this.num *= 4;
            num += 20;
            console.log(num);
        }//     
    })(num)//   this windowthis.num  ,       num,          ,                  。             。
};//       。obj fn    return   ,            。
var fn = obj.fn;//obj.fn return   
fn();//65---                ,this     windowglobal),ES6  , num                 , 45+20=65,      num = 60 * 4 = 240
obj.fn();//85---   obj     fn  ,this  obj,  obj.num = 30 * 4 = 120
console.log(window.num, obj.num);
以上の内容は個人学習記録として使われています.ご参考までに、ご検討ください.