JS中一道關於this和閉包的題
阿新 • • 發佈:2020-09-09
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);
-> 65
-> 85
-> 240, 120
obj.fn()執行
執行this.num * = 3 將全域性下的num改為 60
執行 num+=15,將私有作用域下的num改為45,因為num是形參VAR不影響私有變數num
執行 num = 45,私有變數num 為45
因為私有作用域下的F2函式被外部引用,所以棧記憶體不銷燬
執行fn()
執行this.num * = 4,將全域性下的num更改為240
執行 num + = 20,將上級作用於下的私有變數num改為65
執行console.log(num) => 65
執行obj.fn()
執行this.num * = 4,將obj例項中的num改為120
執行num + = 20, 將上級作用於下的私有變數num改為85
執行console.log(num) => 85
執行console.log(window.num, obj.num) => 240, 120