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