第一段代碼var n = 1; //全局變量,作用域?yàn)楫?dāng)前文檔function f() { var n = 2; //局部變量,作用域僅限于函數(shù)體內(nèi) var e = function () { //使用function 語(yǔ)句定義的函數(shù)結(jié)構(gòu)體 return n; //檢查變量n到底返回什么值 }; console.log(e());//2 return e; //返回函數(shù)結(jié)構(gòu)}console.log(f());//調(diào)用外層函數(shù) 調(diào)用f()相當(dāng)于調(diào)用e;console.log(f()());//調(diào)用外層函數(shù) 調(diào)用f()()相當(dāng)于調(diào)用e();//2第二段代碼var n = 1; //全局變量,作用域?yàn)楫?dāng)前文檔function f() { var n = 2; //局部變量,作用域僅限于函數(shù)體內(nèi) var e = new Function("return n;");//使用Function構(gòu)造函數(shù)定義的函數(shù)結(jié)構(gòu)體 console.log(e());//1 return e; //返回函數(shù)結(jié)構(gòu)}console.log(f());//調(diào)用外層函數(shù) 調(diào)用f()相當(dāng)于調(diào)用e;console.log(f()());//調(diào)用外層函數(shù) 調(diào)用f()()相當(dāng)于調(diào)用e();//1第一段和第二段 var e 賦值不一樣,前者把函數(shù)作為直接量賦值給變量,后者是new的構(gòu)造函數(shù),最后兩段代碼結(jié)果不一樣。別分是2和1。我在查閱資料是,有官方解釋是這樣的:因?yàn)镕unction()構(gòu)造函數(shù)定義的函數(shù)作用域需要?jiǎng)討B(tài)確定,而不是在定義函數(shù)時(shí)確定的。 官方這個(gè)解釋我沒(méi)明白 這個(gè)動(dòng)態(tài)確定是什么時(shí)候確定的,以什么標(biāo)準(zhǔn)來(lái)確定的。 哪位經(jīng)驗(yàn)豐富的朋友分享下,謝謝
JS 函數(shù)式基礎(chǔ)
搖曳的薔薇
2019-03-04 15:15:43