追求JS小姊姊系列 Day17 -- 方函式的能力展现:有小弟真好:函式隐含参数 arguments

前情提要

方函式也有流程分工,参数负责收东西

方函式:(电话再响)喂,你说参数不在东西谁要收吗?直接放着没关系,还是有人会帮我收
:果然是经营物流吗?这样谁会收呢?


参数不在怎麽办?

function whoIsParameters(){
    console.log(arguments);
}

whoIsParameters("Rex","Ray");

猜猜上面最後会印出什麽?undefined吗?

不是没有参数接收吗?怎麽会?都是arguments暗地里接收的。


Arguments

它跟...restParameter同样会将资料存入阵列中,并可以透过[i]查询内容跟length长度,但它只是个类阵列(Array-like-object)

检测它是否为阵列

function trys(){
    console.log(Array.isArray(arguments));
}
trys()

这里显示的false代表的是:它并不是真正的Array,结果看下图:

function convertToArray(){
    
    //类阵列使用array.forEach
    arguments.forEach((i)=>console.log(i));
}
convertToArray(1,2,3,4,5,6)

在上图,我们尝试让所谓类阵列使用Array.methods,结果如上。

让它成为真正的~~郑列~~ 吧
可透过Array.from(),就能将类阵列转换为真正的Array

function convertToArray(){
    //将类阵列的转换结果存入变数x
    let x = Array.from(arguments);
    //接着使用Array.methods
    x.forEach((i)=>console.log(i));
}
convertToArray(1,2,3,4,5,6)

结果就能顺利使用了!

关於arguments你还可以知道的事

非严格模式
下它可作为参数别名,什麽意思呢?

function useArgumentsToParameter(input){
    console.log(input,"这里是隐含参数调整前的");
    console.log(arguments[0]);
    
    //我们修改`arguments`的值
    arguments[0] = 2486;
    console.log(input,"这里是隐含参数调整後的");
    
}
useArgumentsToParameter(8+9)

这时你调整arguments的值,会影响原本的引数值。

严格模式下:

  1. agruments不能作为参数别名
  2. 先说结论:严格模式下,参数跟arguments互不受影响,什麽意思?

这里分别修改参数arguments的值为例:

function useArgumentsToParameter(input){
    //新增严格模式
    `use strict`
    
    console.log(input,"这里是隐含参数调整前的");
    console.log(arguments[0]);
    
    //修改`arguments`的值
    arguments[0] = 2486;
    
    //发现不受影响
    console.log(input,"这里是隐含参数调整後的");
    console.log(arguments[0]);
    
    //修改参数值
    input = 530;
    console.log(input,"这里是参数调整後的");
    console.log(arguments[0]);
}
useArgumentsToParameter(8+9);

欲知更多严格模式的规范,可参考队友所写的:D4 - 加盐不加价 严格模式开启,让你吃一吃就认识严格模式~

-- to be continued --


那今天就到这边搂!今天分享喜欢的歌是:
无妄合作社 No-nonsense Collective〈青春之歌 The Grand Tour〉Official Music Video
https://www.youtube.com/watch?v=qRCnF7SMufo

每天的休息,是为了後面的追求,明天见。


reference:

忍者2
MDN


<<:  初学者跪着学JavaScript Day17: 物件:new Set()

>>:  大共享时代系列_016_共享餐桌

任务排程

本文目标 学习基本的排程演算法 阅读原始码以理解排程器的实际运作 常见的排程演算法 FCFS (Fi...

3面向谈ML产品与软件产品的相异处

在过去的5-7年当中,ML已经不再只限於研究人员能够接触、使用,越来越多的AI/ML工具以及产品出现...

CSS微动画 - Loading来了!转啊转啊~

Q: 从哪一种Loading开始呢? A: 转圈圈的Loading应该是基本? 之後将会进入一系列...

[DAY2]k8s在做什麽

先来张时代的眼泪 图片来源(官网资料) 最原始的实体主机一台一台设定环境:纯手工,因为硬体配置都是固...

铁人赛 Day10-- PHP SQL基本语法(五) -- 帐密登入验证 & mysqli_query

前言 昨天知道了怎麽使用 SELECT 和 WHERE 之後,就要来实际做做看啦 (先附上整段程序码...