最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

es6函數(shù)中的作用域?qū)嵗治?/h1>
 更新時間:2020年04月18日 10:39:36   作者:wangliang_001  
這篇文章主要介紹了es6函數(shù)中的作用域,結(jié)合實例形式分析了es6函數(shù)作用域相關(guān)原理、用法與操作注意事項,需要的朋友可以參考下

本文實例講述了es6函數(shù)中的作用域。分享給大家供大家參考,具體如下:

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

var x = 1;

function f(x, y = x) {
 console.log(y);
}

f(2) // 2

上面的代碼中,參數(shù)y的默認(rèn)值等于變量x。調(diào)用函數(shù)f時,參數(shù)形成一個單獨的作用域。在這個作用域里面,默認(rèn)值變量x指向第一個參數(shù)x,而不是全局變量x,所以輸出是2。

再看下面的例子。

let x = 1;

function f(y = x) {
 let x = 2; 
 console.log(y)
}

上面代碼中,函數(shù)f調(diào)用時,參數(shù)y = x形成一個單獨的作用域,這個作用域里面,變量x本身沒有定義,所以指向外層的全局變量x。函數(shù)調(diào)用時,函數(shù)體內(nèi)部的局部變量x影響不到默認(rèn)值變量x。

如果此時,全局變量x不存在,就會報錯。

function f(y = x) {
 let x = 2;
 console.log(y)
}

f() // ReferenceError: x is not defined

下面這樣寫,也會報錯。

var x = 1;

function foo(x = x) {
 // ...
}

foo() // ReferenceError: x is not defined

上面代碼中,參數(shù)x = x形成一個單獨作用域,實際執(zhí)行的是 let x = x,由于暫時性死區(qū)的原因,這行代碼會報錯"x未定義"。

如果參數(shù)的默認(rèn)值是一個函數(shù),該函數(shù)的作用域也遵守這個規(guī)則。請看下面的例子。

let foo = 'outer'

function bar(func = () => foo) {
 let foo = 'inner';
 console.log(func())
}

bar() // outer

上面代碼中,函數(shù)bar的參數(shù)func的默認(rèn)值是一個匿名函數(shù),返回值是變量foo。函數(shù)參數(shù)形成的單獨的作用域里面,并沒有定義變量foo,所以foo指向外層的全局變量foo,因此輸出outer。

如果寫成下面這樣,就會報錯。

function bar (func = () => foo) {
 let foo = 'inner'
 console.log(func())
}

bar() // ReferenceError: foo is not defined

上面代碼中,匿名函數(shù)里面的foo指向函數(shù)外層,但是函數(shù)外層并沒有聲明變量foo,所以報錯了。

下面是一個更復(fù)雜的例子。

var x = 1;
function foo(x, y = function() {x = 2;}) {
 var x = 3;
 y()
 console.log(x)
}

foo() // 3
x // 1

上面代碼中,函數(shù)foo的參數(shù)形成一個單獨作用域。這個作用域里面,首先聲明了變量x,然后聲明了變量y,y的默認(rèn)值是一個匿名函數(shù)。這個匿名函數(shù)內(nèi)部的變量x, 指向同一個作用域的第一個參數(shù)x。函數(shù)foo內(nèi)部又聲明了一個內(nèi)部變量。該變量與第一個參數(shù)x由于不是同一個作用域,所以不是同一個變量,因此執(zhí)行y后,內(nèi)部變量x和外部全局變量x的值都沒變。

如果將var x = 3的var 去除,函數(shù)foo的內(nèi)部變量x就指向第一個參數(shù),與匿名函數(shù)內(nèi)部的x是一致的,所以最后輸出的就是2,而外層的全局變量x依然不受影響。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘

    JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘

    這篇文章主要介紹了JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • js解決url傳遞中文參數(shù)亂碼問題的方法詳解

    js解決url傳遞中文參數(shù)亂碼問題的方法詳解

    前后臺用js傳參過程中,如果是中文就容易出現(xiàn)亂碼,下面這篇文章主要給大家介紹了關(guān)于js解決url傳遞中文參數(shù)亂碼問題的的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 通過正則格式化url查詢字符串實現(xiàn)代碼

    通過正則格式化url查詢字符串實現(xiàn)代碼

    看到項目里通過js數(shù)組split方法格式化查詢字符串的,突發(fā)奇想為什么不能用正則呢,性能如何?感興趣的朋友可以研究下哦
    2012-12-12
  • JS身份證信息驗證正則表達(dá)式

    JS身份證信息驗證正則表達(dá)式

    很多時候我們都是通過一組正則表達(dá)式來判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,首先要做到的是對身份證信息的一些效驗規(guī)則
    2017-06-06
  • 老生常談?wù)谡謱?滾動條的問題

    老生常談?wù)谡謱?滾動條的問題

    小編遇到的問題是在彈出層后面的 遮罩層,因為有滾動條,導(dǎo)致滾動條下面不可視區(qū)域沒有遮罩層。下面就為大家介紹一下解決方法
    2016-04-04
  • bootstrap日期控件問題(雙日期、清空等問題解決)

    bootstrap日期控件問題(雙日期、清空等問題解決)

    這篇文章主要介紹了bootstrap日期控件(雙日期、清空等問題解決)相關(guān)知識,需要的朋友可以參考下
    2017-04-04
  • js css+html實現(xiàn)簡單的日歷

    js css+html實現(xiàn)簡單的日歷

    這篇文章主要為大家詳細(xì)介紹了由html、css、javascript結(jié)合實現(xiàn)的簡單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • layui點擊導(dǎo)航欄刷新tab頁的示例代碼

    layui點擊導(dǎo)航欄刷新tab頁的示例代碼

    今天小編就為大家分享一篇layui點擊導(dǎo)航欄刷新tab頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JavaScript腳本延遲加載有哪些方式

    JavaScript腳本延遲加載有哪些方式

    本文主要介紹了JavaScript腳本延遲加載有哪些方式,主要介紹了五種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • JS獲取子、父、兄節(jié)點方法小結(jié)

    JS獲取子、父、兄節(jié)點方法小結(jié)

    這篇文章主要介紹了JS獲取子、父、兄節(jié)點方法總結(jié)及JS獲取兄弟節(jié)點的兩種方法,需要的朋友可以參考下
    2017-08-08

最新評論

名山县| 工布江达县| 三都| 荣成市| 陆川县| 香河县| 高清| 嘉禾县| 莱阳市| 龙里县| 东乡| 万山特区| 淮阳县| 山东省| 博爱县| 凯里市| 封丘县| 军事| 湘潭县| 金华市| 元朗区| 漠河县| 怀仁县| 临漳县| 江源县| 尼勒克县| 阿拉善左旗| 来宾市| 白玉县| 云梦县| 介休市| 邛崃市| 章丘市| 阿图什市| 江源县| 葵青区| 磐安县| 壤塘县| 长宁县| 阿瓦提县| 嘉黎县|