成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

令人頭疼的 arguments

lanffy / 3249人閱讀

摘要:以我的理解簡單非嚴格模式下,函數(shù)形參和綁定,二者無論誰修改,都會互相影響。嚴格模式下,參數(shù)的值不會隨對象的值的改變而變化。有意思的是在下,如果使用函數(shù)默認值,也會出現(xiàn)類似嚴格模式的效果。原文首發(fā)于我的博客

下面這一題來自 javascript-puzzlers

function sidEffecting(ary) {
  ary[0] = ary[2]
}
function bar(a,b,c) {
  c = 10
  sidEffecting(arguments)
  return a + b + c
}
bar(1,1,1)

上述的結(jié)果是什么?答案是21,當然這是非嚴格模式,如果嚴格模式,那么答案為12。

以我的理解簡單非嚴格模式下,函數(shù)形參和arguments綁定,二者無論誰修改,都會互相影響。

但是,嚴格模式下,任何在函數(shù)體內(nèi)的修改,或形參,或 arguments 只會影響自己,不會影響對方,可以修改下列代碼試一試。

function test(a, b, c) {
    // "use strict"
    var a = 4 
    console.log(a + b + c)
    // arguments[0] = 4
    console.log(arguments[0] + arguments[1] + arguments[2])
}

test(1,2,3)

嚴格模式下,參數(shù)的值不會隨 arguments 對象的值的改變而變化。在正常模式下,對于第一個參數(shù)是 arg 的函數(shù),對 arg 賦值時會同時賦值給 arguments[0],反之亦然(除非沒有參數(shù),或者 arguments[0] 被刪除)。嚴格模式下,函數(shù)的 arguments 對象會保存函數(shù)被調(diào)用時的原始參數(shù)。arguments[i] 的值不會隨與之相應的參數(shù)的值的改變而變化,同名參數(shù)的值也不會隨與之相應的 arguments[i] 的值的改變而變化。

有意思的是在ES6下,如果使用函數(shù)默認值,也會出現(xiàn)類似嚴格模式的效果。

function test(a, b, c = 3) {
    var a = 4 
    console.log(a + b + c)
    // arguments[0] = 4
    console.log(arguments[0] + arguments[1] + arguments[2])
}

test(1,2,3)

花了半個小時,發(fā)現(xiàn)自己以前對嚴格模式理解還有不足,以后這道題作為面試題還不錯。

原文首發(fā)于我的github博客:https://github.com/isLishude/...

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88723.html

相關文章

  • element-ui日期時間選擇器日期格式化問題

    摘要:最近在做的后臺管理頁面,其中用到了來選擇日期時間,但是在將數(shù)據(jù)傳回后臺的過程中遇到了一些令人頭疼的問題,在此記錄一下解決方案,以免日后再次遇到。 最近在做vue+element-ui的后臺管理頁面,其中用到了DateTimePicker來選擇日期時間,但是在將數(shù)據(jù)傳回后臺的過程中遇到了一些令人頭疼的問題,在此記錄一下解決方案,以免日后再次遇到。 showImg(https://segm...

    atinosun 評論0 收藏0
  • 30分鐘掌握ES6/ES2015核心內(nèi)容

    摘要:以下簡稱是語言的下一代標準。因為當前版本的是在年發(fā)布的,所以又稱。用它所聲明的變量,只在命令所在的代碼塊內(nèi)有效。的繼承機制,實質(zhì)是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構(gòu)造函數(shù)修改。 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說,ES6就是E...

    LucasTwilight 評論0 收藏0
  • 30分鐘掌握ES6/ES2015核心內(nèi)容(上)

    摘要:以下簡稱是語言的下一代標準。的繼承機制,實質(zhì)是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構(gòu)造函數(shù)修改??偨Y(jié)以上就是最常用的一些語法,可以說這的語法,在的日常使用中占了追加十分鐘好的嗎分鐘掌握核心內(nèi)容下 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說...

    YPHP 評論0 收藏0
  • Javascript對象拷貝

    摘要:的對象只是指向內(nèi)存中某個位置的指針。所以在拷貝中的對象時,要根據(jù)實際情況做一些考慮。結(jié)論中最好的對象拷貝的算法,很大程度上取決于其使用環(huán)境,以及你需要拷貝的對象類型。 翻譯:瘋狂的技術宅原文:https://smalldata.tech/blog/2... 本文首發(fā)微信公眾號:前端先鋒歡迎關注,每天都給你推送新鮮的前端技術文章 在開始之前,我先普及一些基礎知識。Javascrip...

    simpleapples 評論0 收藏0
  • android高級工程師-閱讀源碼經(jīng)驗總結(jié)

    摘要:對于一個有追求的程序員來說必須讀源碼,當然閱讀源碼是一件令人頭疼的事。和差不多,想法一樣,但是和相比,搜索到的有價值結(jié)果不是很多,沒有的理想,還有一些來著百度知道。 對于一個有追求的程序員來說必須讀源碼,當然閱讀源碼是一件令人頭疼的事。閱讀別人的代碼遠比自己寫代碼要難。Linus 是Linux的早期作者,一句影響深遠的話是Read The Fucking Source Code(RTF...

    idisfkj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<