Javascript ----函数表达和形参实参
1.函数是对象,函数名实际上是函数对象的指针
1、函数声明方式 (函数声明提前)
function sum(num1,num2){
return num1+num2;
}
2、函数表达式
var sums = function(num1,num2){
return num1 + num2;
}
3、构造函数方式
var summs = new Function("num1","num2","return num1+num2");//不推荐 用来理解 “函数是对象,函数名是指针”
2.因为函数名是指针,所以可以理解js中没有重载的概念(函数重载)
function aa(num){
return num + 100;
}
function aa(num){
return num + 200
}var result = aa(100);//300
在声明了两个同名函数,而结果是后面的函数覆盖了前面的函数
3.函数声明和函数表达式的不同
实际上,解析器在实行环境中加载数据时,对函数声明和函数表达式并非一视同仁,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须到等到解析器执行到它所在的代码行,才会真的被解释实行。
- 函数声明方式 js引擎会先将函数声明提前到顶部
alert(sum(1,2));//正常执行
function sum(num1,num2){
return num1+num2;
}
- 函数表达式 //等价的函数表达式,js会从上到下执行,也就在弹出框时找不到函数表达式而报错,执行不了下面的代码
alert(sum(1,3));//报错
var sum = function(num1,num2){
return num1 + num2;
}
注意:除了什么时候可以通过变量访问函数这一点区别,函数声明和函数表达式的语法其实是等价的
形参和实参
形参:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
实参:可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参
function funct(a,b,c){
return b;
}
- 个数问题
funct('a');//正常
funct('a','b','c','d');//正常
funct();//正常
如果形参为三个,但实参值传进一个,正常运行,
如果形参为三个,但实参传进了四个,正常运行,
如果形参为三个,但实参没有传值,正常运行
因为:在js里面,函数的形参是不介意你传递的是什么东西,也不在乎你传递的内容的数据类型,无论你传多少个,甚至不传,解析器也始终不会抱怨。
传参的内容,会以数组的形式表示,函数接收时,始终接收的是这个数组,如果数组里面有参数,它不需要理会数组中的数据类型
function a(){
console.log(arguments[2]);//c
console.log(arguments[1]);//b
console.log(arguments[0]);//a
console.log(arguments.length);//3
console.log(typeof arguments);//obj
}
a('a','b','c');
arguments对象,实际上,只是个类似数组而已,(它并不是Arrary的实例),它可以用[]来访问它里面的每个元素,也能使用length属性来确定参数的多少,arguments对象的长度是由传入的实际参数个数决定的,而不是由定义函数时命名形式参数个数决定的。
2.参数的类型问题
- 基本数据类型
- 在函数中给形参传递基本数据类型时,就是把值复制一个给局部变量,也就是arguments对象中的一个元素
- 如果num是按引用传递的话,那么变量count的值会变成30.但num在函数内部的运算没有影响到函数外部的count变量,所以num和count之间是不认识的,他们仅仅是数值上的相同。(以下代码)
- function addTen(num){ 
 num += 10;
 return num;
 }
 var count = 20;
 var result = addTen(count);
 console.log(count);//20
 console.log(result);//30
 
- 引用数据类型
- 在这个函数中,变量person保存的是一个obj对象,在变量被传递到setName()函数中后备复制到obj,但在函数内部,obj和person引用的是同一个对象,,所以,在函数内部所创建了对象的属性,在函数外部也能访问。(以下代码)
- function setName(obj){
 obj.name = 'Name';
 }
 var person = new Object();
 setName(person);
 alert(person.name);//Name
 
不断总结,才能熟悉,掌握知识,但若想往高处走,还是得从书中获取知识,从实践中获取经验。花点时间,读本好书O(∩_∩)O~~~
(完)
Javascript ----函数表达和形参实参的更多相关文章
- 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数
		函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ... 
- javascript 函数表达和闭包
		函数表达式和闭包 针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 定义函数的两种方法 函数声明: function functi ... 
- 关于函数传参的其他问题(const形参实参/可变形参)
		const 形参和实参 当形参是 const 变量时,实参是 const 或者不是 const 变量都可以. 实参初始化形参时会忽略掉顶层 const: void gel(const int a){ ... 
- 第八章:Javascript函数
		函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的: ... 
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
		1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ... 
- javascript 函数初探 (一)--- 神马是函数
		神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ... 
- JavaScript函数的概念
		函数是这样的一段代码,它只定义一次,但可能被执行或调用任意多次. JavaScript函数是参数化的:函数的定义会包含形参,这些参数在函数的整体中像局部变量一样工作.函数调用时会为形参提供实参的值.除 ... 
- Javascript函数重载,存在呢—还是存在呢?
		1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ... 
- 深入理解javascript函数系列第一篇——函数概述
		× 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ... 
随机推荐
- OptimalSolution(3)--链表问题(1)简单
			单链表Node节点类 public class Node { public int val; public Node next; public Node(int val) { this.val = v ... 
- VuforiaAR 教程
			Vuforia AR不仅可以识别图片也可以识别三维物体 直接上步骤: 1)开发环境 unity2017直接集成了Vuforia AR开发环境,不过在安装时要选择此项,也可以后续去unity官网下载相 ... 
- .Net Core DevOps - 四步实现Vue项目持续集成
			众所周知,现在国内最火的前端框架非Vue莫属了,作为一个.net程序员,早就想体验一下了,但是无奈微软的项目模板不提供Vue的Spa模板,但是我们还是想用怎么办呢?下面来看下我的解决方案 目录 用vu ... 
- 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务
			我们来开始讲述Apache(阿帕奇)服务 小知识: Apache 使得一台服务器上放很多网站,网站同时访问 可以使网站更安全(木马如果是root权限 如果webshell apache 可用 ... 
- MySQL如何进行索引重建操作?
			在MySQL数据库中,没有类似于SQL Server数据库或Oracle数据库中索引重建的语法(ALTER INDEX ... REBUILD),那么在MySQL数据库中,是否有什么方式重建索引呢? ... 
- crontab中部署Python脚本注意事项
			有时候手工执行Python脚本跑的好好的,但是部署到Linux的crontab中后,就会遇到一些问题,最近终于有空整理一下这方面的内容,其实也是自己也踩了一些别人踩过的坑!这里仅仅列举个人遇到的一些小 ... 
- 暑期集训20190725 加法(add)
			[题目描述] 数学课,黑板上写着n个数字,记为A1到An,fateice会重复以下操作若干次: 1. 选择两个奇偶性相同的整数Ai和Aj, 将他们擦去 2. 将Ai+Aj写在黑板上 问黑板上最终是否有 ... 
- Python实现日志文件写入或者打印--类似于Java的Log4j
			开发过Java的应该都知道Log4j的重要性,尤其是在开发测试中,能够让开发和测试人员方便找的bug,Python也有和Log4j相同功能的库那就是logging库,其功能非常强大,在开发测试中很方便 ... 
- Redis必备面试题《基础篇》
			Date:2019-11-12 读前思考: 面试官会问什么样的问题? 所问的问题背后真实的套路是什么? 喜欢问Redis哪些问题? 如何顺畅回答面试问的问题?吊打面试官. 1.什么是Redis? Re ... 
- day7-集合
			一.定义变量是为了吹处理状态的变化,定义变量名是为了获取变量值.字符串.数字.列表.元组.字典都是为了更好的描述变量的状态1.可变不可变:变量名不变时,里面内容是否可以变化# 可变:列表.字典.修改变 ... 
