摘要:三的屬性屬性表示傳入函數(shù)的實(shí)際參數(shù)數(shù)量,而不是函數(shù)聲明時(shí)的形參數(shù)量。你好你好你好你好你好你好擴(kuò)展運(yùn)算符你好你好五嚴(yán)格模式嚴(yán)格模式和非嚴(yán)格模式中,的表現(xiàn)顯示不相同。而在嚴(yán)格模式中,實(shí)參和的值不會(huì)共享。
本文共 635 字,讀完只需 3 分鐘概述
JavaScript中的函數(shù)與其他面向?qū)ο笳Z(yǔ)言有幾個(gè)不同的地方。
沒(méi)有函數(shù)重載
有一個(gè)表示實(shí)參列表的類(lèi)數(shù)組對(duì)象 arguments
一、函數(shù)重載簡(jiǎn)單來(lái)說(shuō),JAVA 同一個(gè)類(lèi)中允許幾個(gè)函數(shù)有同樣的函數(shù)名稱(chēng),但是參數(shù)聲明不一樣,這就是函數(shù)重載。
但是 JS 不支持函數(shù)重載:
function foo(num) { console.log(num + 100) } function foo(num) { console.log(num + 200) } foo(100); // 300
如果 js 中定義了兩個(gè)相同名稱(chēng)的函數(shù),那么該名字只屬于后定義的那個(gè)函數(shù)。
二、arguments 類(lèi)數(shù)組函數(shù) arguments 對(duì)象是所有(非箭頭)函數(shù)中都可用的局部變量, 是一個(gè)類(lèi)似數(shù)組的對(duì)象。你可以使用arguments對(duì)象在函數(shù)中引用函數(shù)的(實(shí)際)參數(shù)。
function foo() { console.log(arguments); } foo(1, "foo", false, {name: "bar"}); // [1, "foo", false, object]
function foo() { console.log(typeof arguments); } foo(1, "foo", false, {name: "bar"}); // object
所以,arguments 是一個(gè)具有數(shù)組樣式的對(duì)象,有 length 屬性,和下標(biāo)來(lái)索引元素。
三、arguments 的屬性length
function foo(num1, num2, num3) { console.log(arguments) } foo(1); // [1]
length 屬性表示傳入函數(shù)的實(shí)際參數(shù)數(shù)量,而不是函數(shù)聲明時(shí)的形參數(shù)量。
callee
callee 表示函數(shù)本身,我們可以在函數(shù)中通過(guò) callee 調(diào)用本身。
slice
arguments 對(duì)象不支持?jǐn)?shù)組的其他方法,但是可以用 Function.call 來(lái)間接調(diào)用。
function sayHi() { console.log(Array.prototype.slice.call(arguments, 0)) } sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
splice
function sayHi() { console.log(Array.prototype.splice.call(arguments, 0)); } sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
Array.from
function sayHi() { console.log(Array.from(arguments)); } sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
擴(kuò)展運(yùn)算符
function sayHi(...arguments) { console.log(arguments); } sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]五、嚴(yán)格模式
嚴(yán)格模式和非嚴(yán)格模式中,arguments 的表現(xiàn)顯示不相同。
// 嚴(yán)格模式 function foo(a, b) { "use strict"; console.log(a, arguments[0]); a = 10; console.log(a, arguments[0]); arguments[0] = 20; console.log(a, arguments[0]); b = 30; console.log(b, arguments[1]) } foo(1); 輸出: 1 1 10 1 10 20 30 undefined // 非嚴(yán)格模式 function foo(a, b) { console.log(a, arguments[0]); a = 10; console.log(a, arguments[0]); arguments[0] = 20; console.log(a, arguments[0]); b = 30; console.log(b, arguments[1]); } foo(1); 輸出: 1 1 10 10 20 20 30 undefined
在非嚴(yán)格模式中,傳入的參數(shù),實(shí)參和 arguments 的值會(huì)共享,當(dāng)沒(méi)有傳入時(shí),實(shí)參與 arguments 值不會(huì)共享。
而在嚴(yán)格模式中,實(shí)參和 arguments 的值不會(huì)共享。
歡迎關(guān)注我的個(gè)人公眾號(hào)“謝南波”,專(zhuān)注分享原創(chuàng)文章。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98599.html
摘要:深入系列第十二篇,通過(guò)的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用獲得構(gòu)造函數(shù)實(shí)例的真相一句話(huà)介紹運(yùn)算符創(chuàng)建一個(gè)用戶(hù)定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類(lèi)型之一也許有點(diǎn)難懂,我們?cè)谀M之前,先看看實(shí)現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過(guò)new的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用new獲得構(gòu)造函數(shù)實(shí)例的真相 new 一句話(huà)介紹 new: new 運(yùn)算符創(chuàng)建一個(gè)用戶(hù)定義的對(duì)象類(lèi)型的實(shí)例或具...
摘要:也就是說(shuō)當(dāng)返回的函數(shù)作為構(gòu)造函數(shù)的時(shí)候,時(shí)指定的值會(huì)失效,但傳入的參數(shù)依然生效。構(gòu)造函數(shù)效果的優(yōu)化實(shí)現(xiàn)但是在這個(gè)寫(xiě)法中,我們直接將,我們直接修改的時(shí)候,也會(huì)直接修改函數(shù)的。 JavaScript深入系列第十一篇,通過(guò)bind函數(shù)的模擬實(shí)現(xiàn),帶大家真正了解bind的特性 bind 一句話(huà)介紹 bind: bind() 方法會(huì)創(chuàng)建一個(gè)新函數(shù)。當(dāng)這個(gè)新函數(shù)被調(diào)用時(shí),bind() 的第一個(gè)參數(shù)...
摘要:背景高級(jí)程序設(shè)計(jì)中提及,不支持函數(shù)重載。若出現(xiàn)函數(shù)名稱(chēng)相同情況下,后者覆蓋前者,故此不會(huì)出現(xiàn)重載的情況。維基百科場(chǎng)景例如,一個(gè)工廠有著數(shù)量級(jí)的員工,期望通過(guò)姓名找到某一員工或某類(lèi)員工,使用同一個(gè)方法通過(guò)透?jìng)鲄?shù)個(gè)數(shù)去查找員工。 背景 ???????《JavaScript高級(jí)程序設(shè)計(jì)》中提及,JavaScript 不支持函數(shù)重載。若出現(xiàn)函數(shù)名稱(chēng)相同情況下,后者覆蓋前者,故此不會(huì)出現(xiàn)重載...
摘要:后續(xù)我將推出進(jìn)階系列,一方面是一個(gè)監(jiān)督自己學(xué)習(xí)的一個(gè)過(guò)程,另一方面也會(huì)給看到的童鞋一些啟發(fā)。第二步鏈接到原型中現(xiàn)在把構(gòu)造函數(shù)和參數(shù)都打印出來(lái)了。 原文:https://zhehuaxuan.github.io/... 作者:zhehuaxuan 寫(xiě)在前面的話(huà) 前端的入門(mén)相對(duì)簡(jiǎn)單,相對(duì)于其他方向天花板可能會(huì)相對(duì)較低。但是在市場(chǎng)上一個(gè)優(yōu)秀的前端依舊是很搶手的。能夠站在金字塔上的人往往寥寥...
摘要:本計(jì)劃一共期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)劃,點(diǎn)擊查看前端進(jìn)階的破冰之旅本期推薦文章深入之執(zhí)行上下文棧和深入之變量對(duì)象,由于微信不能訪(fǎng)問(wèn)外鏈,點(diǎn)擊閱讀原文就可以啦。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第二天。 本計(jì)劃一共28期,每期...
閱讀 2462·2021-11-23 09:51
閱讀 2497·2021-11-11 17:21
閱讀 3138·2021-09-04 16:45
閱讀 2420·2021-08-09 13:42
閱讀 2256·2019-08-29 18:39
閱讀 2918·2019-08-29 14:12
閱讀 1323·2019-08-29 13:49
閱讀 3395·2019-08-29 11:17