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