面接問題:(クローズドテスト、this指向、事前解析、関数実行順序などの知識点)
4865 ワード
実例(コメント版なし)
1,コール関数のthisはwindow 2を指します.関数としてどんな関数でも呼び出すと、thisはwindow 3を指します.
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 window, this.num , num, , 。 。
};// 。obj fn return , 。
var fn = obj.fn;//obj.fn return
fn();//65--- ,this window(global),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);
以上の内容は個人学習記録として使われています.ご参考までに、ご検討ください.