JavaScript中函数的形参和实参的实现原理剖析
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数:
<script type="text/javascript">
function one(a,b,c) {
this.x = a;
console.log(a);
}
one(1);
</script>
我们传递的数字只有一个1,但是形参那里有abc三个。这分明对不上啊不是吗?
这个时候如果我们查看b,c的话会显示undefined。ps:比如console.log(b)。
当然啦,本来就没有这两个数。怎么找给你?
那面对这种实参和形参对不上号的情况,JS是怎么实现的呢?让我们来看一段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>JavaScript中函数的形参和实参的区别</title>
</head>
<body>
<script type="text/javascript">
function one(a,b,c) {
return one.length;
}
function two(a,b,c,d,e,f,g){
return arguments.length;
}
console.log(one()); //3
console.log(two()); //0
</script>
</body>
</html>
这里我们在one函数里面返回了one.length,在two函数里面返回arguments.length。可能你已经发现了,输出的one()返回了one.length就是形参的数量,而argument.length就是实参的数量。
瞬间秒懂了有木有?
甚至我们可以用arguments[0]取到实参的数字。
但是为什么没有形参的数字可以用类似数组的方式这样表示呢?好吧,我知道你是处女座的凡事要求对称。除非你形参是数组你可以这样用。不然在函数里面我们就只能用形参的名字来取得实际的参数了。
在C#,Java里面对参数类型和个数相对JS来说要求十分严格,一点对不上就报错了。而JS就因为有这样的设计而可以变成相对灵活的语言。
上述方法就是JS依赖的不强制对形参和实参规定个数相等的实现了。至于类型的相同,JS什么类型都可以写成var a = ……,要类型何用?所以才说JS是一种弱类型的语言嘛!
JavaScript中函数的形参和实参的实现原理剖析的更多相关文章
- Javascript中函数的四种调用方式
一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...
- C++中函数的形参为数组时,实质形参是指针
C++中函数的形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针.参考下面的例子: #include<iostream> using namespace std; void f ...
- JavaScript中函数是不能重载原因
以前有一次写JS插件的时候,由于后台写习惯了,妄想在JS中写重载函数,可惜不能成功,原因花了一点时间记了下来 首先要理解重载的含义:函数返回值不同或者形式参数个数不同但函数名相同的函数 JavasSc ...
- javascript中函数声明、变量声明以及变量赋值之间的关系与影响
javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...
- JavaScript中函数函数的定义与变量的声明<基础知识一>
1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...
- JavaScript 中函数节流和函数去抖的讲解
JavaScript 中函数节流和函数去抖的讲解 我们都知道频繁触发执行一段js逻辑代码对性能会有很大的影响,尤其是在做一些效果实现方面,或者逻辑中需要进行后端请求,更是会导致卡顿,效果失效等结果,所 ...
- JavaScript中函数的调用
JavaScript中函数的调用 制作人:全心全意 在JavaScript中,函数定义后并不会自动执行,要执行一个函数需要在特定的位置调用该函数,调用函数需要创建调用语句,调用语句包含函数名称和参数. ...
- JavaScript中函数的定义
JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...
- JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域
一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...
随机推荐
- 二、IRIG_B解码AC信号
AC-----过零检测(MAX913ESA)---1khzB码信号(以0v为界大于0为高,小于0为低,的 方波信号) AC-----信号放大(TLE2022ID--mv到5v) ---系统电压转换(M ...
- Why does uitableview cell remain highlighted?
What would cause a tableview cell to remain highlighted after being touched? I click the cell and ca ...
- 将centos系统中的网卡em1还原为eth0
1.修改系统grub 操作:vi /boot/grub/grub.conf 增加一个 biosdevname=0 的启动参数 示例: [root@xingfujie ~]# cat /boot/gru ...
- LintCode-Implement Queue by Stacks
As the title described, you should only use two stacks to implement a queue's actions. The queue sho ...
- 【Binary Tree Maximum Path Sum】cpp
题目: Given a binary tree, find the maximum path sum. The path may start and end at any node in the tr ...
- selenium使用IE 浏览器问题
代码如下: #coding=utf-8 from selenium import webdriver driver=webdriver.Ie() driver.get('https://www.bai ...
- shell 进程查询相关的命令
同一个进程部署多个,如何知道删除哪个: ll /proc/ 会显示位置 查看pid下哪些socket链接 ll /proc//fd
- web前端网页特效大全导航列表
CSS3和Html5 图表与图形 表单验证 导航菜单 table选项卡 视频播放器 日期和时间 返回顶部 图层代码 滚动代码 幻灯片 文字特效 图片放大镜 juqery焦点图 瀑布流 广告悬浮代码 在 ...
- 【BZOJ】【1202】【HNOI2005】狡猾的商人
Orz iwtwiioi http://www.cnblogs.com/iwtwiioi/p/3887617.html 并查集+前缀和 啊……这题应该是水题吧?但是我这个大沙茶居然一天都没想出来…… ...
- razor GPU
抓之前要把设置里面 Setting -Debug Setting -Graphic -PA DEBUG yes -RAZOR GPU yes replay是个很有用的功能,要设置 -Debug Set ...