摘要:以我的理解簡單非嚴(yán)格模式下,函數(shù)形參和綁定,二者無論誰修改,都會(huì)互相影響。嚴(yán)格模式下,參數(shù)的值不會(huì)隨對象的值的改變而變化。有意思的是在下,如果使用函數(shù)默認(rèn)值,也會(huì)出現(xiàn)類似嚴(yá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,當(dāng)然這是非嚴(yán)格模式,如果嚴(yán)格模式,那么答案為12。
以我的理解簡單非嚴(yán)格模式下,函數(shù)形參和arguments綁定,二者無論誰修改,都會(huì)互相影響。
但是,嚴(yán)格模式下,任何在函數(shù)體內(nèi)的修改,或形參,或 arguments 只會(huì)影響自己,不會(huì)影響對方,可以修改下列代碼試一試。
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)
嚴(yán)格模式下,參數(shù)的值不會(huì)隨 arguments 對象的值的改變而變化。在正常模式下,對于第一個(gè)參數(shù)是 arg 的函數(shù),對 arg 賦值時(shí)會(huì)同時(shí)賦值給 arguments[0],反之亦然(除非沒有參數(shù),或者 arguments[0] 被刪除)。嚴(yán)格模式下,函數(shù)的 arguments 對象會(huì)保存函數(shù)被調(diào)用時(shí)的原始參數(shù)。arguments[i] 的值不會(huì)隨與之相應(yīng)的參數(shù)的值的改變而變化,同名參數(shù)的值也不會(huì)隨與之相應(yīng)的 arguments[i] 的值的改變而變化。
有意思的是在ES6下,如果使用函數(shù)默認(rèn)值,也會(huì)出現(xiàn)類似嚴(yá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)
花了半個(gè)小時(shí),發(fā)現(xiàn)自己以前對嚴(yán)格模式理解還有不足,以后這道題作為面試題還不錯(cuò)。
原文首發(fā)于我的github博客:https://github.com/isLishude/...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88723.html
摘要:最近在做的后臺(tái)管理頁面,其中用到了來選擇日期時(shí)間,但是在將數(shù)據(jù)傳回后臺(tái)的過程中遇到了一些令人頭疼的問題,在此記錄一下解決方案,以免日后再次遇到。 最近在做vue+element-ui的后臺(tái)管理頁面,其中用到了DateTimePicker來選擇日期時(shí)間,但是在將數(shù)據(jù)傳回后臺(tái)的過程中遇到了一些令人頭疼的問題,在此記錄一下解決方案,以免日后再次遇到。 showImg(https://segm...
摘要:以下簡稱是語言的下一代標(biāo)準(zhǔn)。因?yàn)楫?dāng)前版本的是在年發(fā)布的,所以又稱。用它所聲明的變量,只在命令所在的代碼塊內(nèi)有效。的繼承機(jī)制,實(shí)質(zhì)是先創(chuàng)造父類的實(shí)例對象所以必須先調(diào)用方法,然后再用子類的構(gòu)造函數(shù)修改。 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標(biāo)準(zhǔn)。因?yàn)楫?dāng)前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說,ES6就是E...
摘要:以下簡稱是語言的下一代標(biāo)準(zhǔn)。的繼承機(jī)制,實(shí)質(zhì)是先創(chuàng)造父類的實(shí)例對象所以必須先調(diào)用方法,然后再用子類的構(gòu)造函數(shù)修改。總結(jié)以上就是最常用的一些語法,可以說這的語法,在的日常使用中占了追加十分鐘好的嗎分鐘掌握核心內(nèi)容下 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標(biāo)準(zhǔn)。因?yàn)楫?dāng)前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說...
摘要:的對象只是指向內(nèi)存中某個(gè)位置的指針。所以在拷貝中的對象時(shí),要根據(jù)實(shí)際情況做一些考慮。結(jié)論中最好的對象拷貝的算法,很大程度上取決于其使用環(huán)境,以及你需要拷貝的對象類型。 翻譯:瘋狂的技術(shù)宅原文:https://smalldata.tech/blog/2... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 在開始之前,我先普及一些基礎(chǔ)知識(shí)。Javascrip...
摘要:對于一個(gè)有追求的程序員來說必須讀源碼,當(dāng)然閱讀源碼是一件令人頭疼的事。和差不多,想法一樣,但是和相比,搜索到的有價(jià)值結(jié)果不是很多,沒有的理想,還有一些來著百度知道。 對于一個(gè)有追求的程序員來說必須讀源碼,當(dāng)然閱讀源碼是一件令人頭疼的事。閱讀別人的代碼遠(yuǎn)比自己寫代碼要難。Linus 是Linux的早期作者,一句影響深遠(yuǎn)的話是Read The Fucking Source Code(RTF...
閱讀 3012·2021-11-22 12:06
閱讀 599·2021-09-03 10:29
閱讀 6526·2021-09-02 09:52
閱讀 2013·2019-08-30 15:52
閱讀 3411·2019-08-29 16:39
閱讀 1191·2019-08-29 15:35
閱讀 2061·2019-08-29 15:17
閱讀 1417·2019-08-29 11:17