国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - ES6中函數(shù)參數(shù)默認值為函數(shù)的問題?

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

問題描述

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

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

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

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

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

問題解答

回答1:

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

回答2:

把語法糖徹底展開,應(yīng)該能看清楚點

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值取函數(shù)定義時的值而不是執(zhí)行時的值。

回答4:

基于回復(fù)者的代碼:

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采取的是詞法作用域,所以,無論函數(shù)在哪里被調(diào)用,或者以任何形式被調(diào)用,其詞法作用域只由其被聲明時的位置決定。

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

類似代碼:

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

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 阜新市| 托里县| 汉阴县| 青铜峡市| 建阳市| 蓬莱市| 青田县| 余庆县| 西畴县| 张家口市| 华坪县| 桓台县| 米易县| 石狮市| 汾西县| 邯郸县| 电白县| 南通市| 奉化市| 措美县| 灌阳县| 绵竹市| 浪卡子县| 封丘县| 揭东县| 扎囊县| 钦州市| 防城港市| 米林县| 利津县| 富川| 林芝县| 肥城市| 府谷县| 齐河县| 四川省| 长阳| 武汉市| 武陟县| 缙云县| 襄城县|