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是一种弱类型的语言嘛!

时间: 2024-10-06 00:49:55

JavaScript中函数的形参和实参的实现原理剖析的相关文章

JS复习—函数(函数的形参和实参没整理,函数的方法待补充,函数化编程待扩展)

函数 一.函数的定义 只定义一次,但可以被执行或调用任意次.JavaScript中函数是参数化的:函数的定义包括一个称为形参的标示符列表,这些参数在函数体中像局部变量一样工作.如果函数挂在在一个对象上,作为对象的一个属性,就称它为对象的一个方法.当通过这个对象来调用函数时,该对象就是此次调用的上下文,也就是该函数的this的值.用于初始化一个新创建的对象的函数称为构造函数. 二.函数的三种定义方式 1.函数声明: 函数声明语句实际上声明了一个变量,并把一个函数对象复制给它. function s

私人定制javascript中函数小知识点

函数的定义 首先在javascript中,函数就是对象,程序可以随意操控它们.比如,可以给它们设置属性,甚至调用它们的方法.函数使用function关键字来定义.它既可以用在函数定义表达式,也可以用在函数声明语句中.函数声明function后面必须要更上函数名称也就是所谓的函数名称标识符.如果是函数表达式函数名称标识符可有可无.这段重点是函数是对象,所以函数表现出来的种种行为你想想成对象,那么很多疑惑可能就恍如昨日初见. 函数调用 4种方式来调用javascript函数: 1.作为函数 就是函数

Javascript中函数的四种调用方式

一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属性:arguments和this. arguments主要是用来保存函数参数,arguments中的callee属性主要是用来指向拥有当前arguments的函数(理解Javascript参数中的arguments对象). 3.在ECMAScript5中规范了另一个函数属性:caller(Opera

javascript中函数作用域之”提升“

javascript中函数作用域之变量提升 当我们在函数内部用关键字var声明一个变量的时候,此变量的作用域限制在当前函数. 提升:在一个作用域内部,不管一个变量用var声明的位置在哪里,这个变量属于当前整个作用域,并且在当前作用域的任何位置都可以访问它.在javascript中,这种行为/现象称之为"提升",即一个变量在一个作用域的任何位置用var声明,javascript引擎都会把这些用var声明的变量"移动"到当前作用域的开始处. 谈到javascript这种

函数的形参与实参

在函数中,形参不是必须的 1 function fn(){ 2 console.log(arguments[0]+arguments[1]); >>11 3 console.log(arguments.length); >>2 4 console.log(arguments); >>[10, 1] 5 } 6 fn(10,1); arguments是一个类似数组的函数,但它仅仅也只是类似,并不是真的数组.从上面的代码中我们可以看到我并没有使用形参,但是达到了同样的效果.

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

javascript中函数的不同解析

<html> <head> <title>javascript的函数的生命周期</title> <meta charset="utf-8"/> <script type="text/javascript"> /* javascript是所有语言中对函数生命周期处理最为复杂的语言之一 而javascript的函数的生命周期取决于js解释器是如何解释我们编写 的js代码,我们以例子来说明javasc

python入门基础教程08 函数的形参与实参

函数的形参与实参 在函数定义时的变量称作函数的形参,形参主要是函数接收函数外部值传入函数体内去处理,是函数和外部程序或者语句的接口.函数调用时的变量称之为实参.现在我们举个例子来说明一下形参和实参. #define fun: multi def multi(x, y):     z = x * y         return z #define main function def main():     a = 12     b = 13 #function 'add' called c = 

JavaScript中函数函数的定义与变量的声明&lt;基础知识一&gt;

1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new function("a","b","return a*b"); createFun(10,3); 2.JavaScript中变量的三种声明方式 a.var foo=value; b.window.foo=value; c.foo=value; //隐