亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

javascript - ES6中函數參數默認值為函數的問題?

瀏覽:88日期:2023-02-08 11:12:41

問題描述

我對函數參數默認值為函數的情況有許多困惑比如

let foo = ’outer’;function bar(func = x => foo) { let foo = ’inner’; console.log(func()); }bar(); //outer

根據阮一峰的es6入門,我知道函數參數是默認值的話,會先有個塊級作用域包裹參數,初始化結束后塊級作用域消失

一旦設置了參數的默認值,函數進行聲明初始化時,參數會形成一個單獨的作用域(context)。等到初始化結束,這個作用域就會消失。這種語法行為,在不設置參數默認值時,是不會出現的。

如果默認值是普通變量我能理解,但還是不懂為什么這里輸出的是outer而不是inner

問題解答

回答1:

一句話:函數的閉包在定義時形成,而非運行時。

回答2:

把語法糖徹底展開,應該能看清楚點

let foo = ’outer’;function fk_compiler() { return foo;}function bar(func) { if (func === undefined) { func = fk_compiler; } let foo = ’inner’; console.log(func());}bar();

你看,fk_compiler里是不是只能返回外部作用域下的foo?

回答3:

js是詞法作用域,foo值取函數定義時的值而不是執行時的值。

回答4:

基于回復者的代碼:

let foo = ’outer’;function fk_compiler() { return foo;}function bar(func) { if (func === undefined) { func = fk_compiler; } let foo = ’inner’; console.log(func());}bar();

js采取的是詞法作用域,所以,無論函數在哪里被調用,或者以任何形式被調用,其詞法作用域只由其被聲明時的位置決定。

fk_compiler被聲明的作用域在全局,所以,它會去訪問全局作用域中的foo。答案也就出來了。

類似代碼:

function foo(){ console.log(this.a);}(function init(){ var a = ’inner’;//此處改為 window.a = ’global’;再試試 foo();})();

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产三级国产精品国产国在线观看 | 在线观看人成网站深夜免费 | 一级特黄性色生活片一区二区 | 69成人免费视频 | 亚洲 欧美 都市 自拍 在线 | 日本特黄a级高清免费酷网 日本特黄特色 | 国产成人在线看 | 久久五 | 奇米第四狠狠777高清秒播 | 国产亚洲高清在线精品不卡 | 亚洲国产精品a一区二区三区 | 亚洲男人天堂2018 | 国产精品大全国产精品 | 久久精品午夜视频 | 国产精品yjizz视频网一二区 | 精品国产日韩久久亚洲 | 亚洲爽爽 | 欧美日韩中文国产一区二区三区 | 男女视频在线免费观看 | 男女扒开双腿猛进入爽爽视频 | 欧美一级久久久久久久久大 | 久久高清精品 | 在线观看免费国产成人软件 | 久久伊人成人网 | 国产成人一区二区三区精品久久 | 波多野结衣视频免费观看 | 久久久久久久久性潮 | 久久久久欧美国产精品 | 高清日本在线成人免费视频 | 国产亚洲精 | 久9这里精品免费视频 | 精品国产96亚洲一区二区三区 | 全部精品孕妇色视频在线 | 久久精品国产精品亚洲艾 | 高清免费国产在线观看 | 欧美全免费aaaaaa特黄在线 | 亚洲一区二区三区不卡在线播放 | 各种偷拍盗摄视频在线观看 | 国内久久 | 亚欧成人毛片一区二区三区四区 | 欧美a免费|