寫出下面**的輸出結果:
var x = 3,
obj = ;
obj.fn = (function ()
})();
var fn = obj.fn;
obj.fn(6);
fn(4);
console.log(obj.x, x);
此題的**:
全域性**執行形成乙個全域性上下文ec(g),有乙個全域性變數物件vo(g),建立乙個值3,建立變數x兩者關聯;開闢乙個堆記憶體0x001,有乙個16進製制位址,建立乙個變數名,兩者關聯。
obj.fn賦值乙個自執行函式的返回值,首先開闢乙個函式堆記憶體0x002,函式執行開闢乙個棧記憶體ec(an),此函式執行時返回乙個函式的堆0x003,將此函式堆賦值給此上下文以外的變數obj.fn,所以此自執行函式執行形成的堆記憶體不被釋放,形成閉包,將自己私有上下文中的內容保護和儲存起來。
【var fn = obj.fn;】,將自執行函式返回的函式堆0x003賦值給全域性變數fn。
【obj.fn(6);】執行主體是obj,即函式執行時的this指向obj
【fn(4);】執行主體是window。
閉包練習題
var data for var i 0 i 3 i i data 0 data 1 data 2 答案 0 1 2function fun n,o var a fun 0 這裡第一次呼叫fun時輸出undefined,返回了乙個物件給a,n 0 a.fun 1 這裡首先呼叫了a物件的屬相fun,屬...
JS閉包 練習題
牛客網關於閉包的一道題的解析 實現函式 makeclosures,呼叫之後滿足如下條件 1 返回乙個函式陣列 result,長度與 arr 相同 2 執行 result 中第 i 個函式,即 resulti,結果與 fn arr i 相同 示例1 輸入 1,2,3 function x 輸出 4 v...
Sed綜合練習題
1.將nginx配置檔案裡的第乙個server塊裡的listen的埠80 修改為8080 sed i r s listen.80 18080 p nginx.conf2.在nginx的配置檔案裡新增乙個server塊配置 server error page 404 404.html location...