6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递
JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义
匿名函数:
函数表达式可以存储在变量中,并且该变量也可以作为函数使用。
实际上是匿名函数。
<body> <p>函数存储在变量后,变量可作为函数使用:</p>
<p id="demo"></p>
<script>
var x = function(a,b){return a+b; };
document.getElementById("demo").innerHTML = x(1,2);
</script> </body>
构造函数:
<body> <p>JavaScrip 内置构造函数。</p>
<p id="demo"></p>
<script type="text/javascript" charset="utf-8">
var multiply = new Function("a","b","return a*b");
document.getElementById("demo").innerHTML = multiply(3,4);
</script>
</body>
另一种写法:
<body> <p id="demo"></p>
<script type="text/javascript" charset="utf-8">
var multiply = function(a, b) { return a*b };
document.getElementById("demo").innerHTML = multiply(3,5);
</script>
</body>
函数的提升:
- 提升是JavaScript默认将当前的作用于提升到前面去的行为,应用在变量的声明与函数的声明
- JavaScript在执行代码之前会进行预编译,而预编译的作用就是将函数和变量的作用域提升至其对应作用域的最顶端
- 因此,函数可以在声明之前调用
函数的自调用:
通过添加括号来说明他是一个函数表达式
<script>
(function () {
document.getElementById("demo").innerHTML = "Hello! 我是自己调用的";
})();
</script>
函数对象:
- 在JavaScript中使用typeof操作符判断函数类型将返回function,但是JavaScript函数描述为一个对象更加准确
- JavaScript函数有属性和方法,arguments.length属性返回函数调用过程接收到的参数个数
箭头函数:默认绑定外层this的值,在箭头函数中this的值和外层的this是一样的
() => {}
函数参数:
- JavaScript对函数参数的值没有进行任何检查
- JavaScript函数参数与大多数其他语言的函数参数区别在于:它不关注参数个数与参数数据类型
- 如果函数设置了过多的参数,参数将无法被引用,只能使用Arguments对象来调用
- 没有设置时,参数默认为undefined
<body> <p>设置参数的默认值。</p>
<p id="demo"></p>
<script>
function myfunction(x,y) {
if(y == undefined){
y = 0;
}
return x * y;
}
document.getElementById("demo").innerHTML = myfunction(4);
</script> </body>
Arguments对象:
- argument对象包含了函数调用的参数数组
通过Argumens对象找到参数中的最大值:
<script>
x = findMax(1,100,-200,101,1111,22112); function findMax(){
var i,max = arguments[0]; if(arguments.length < 2) return max; for( i = 0; i < arguments.length; i ++){
if(arguments[i] > max)
{
max = arguments[i]; }
} return max; }
document.getElementById("demo").innerHTML = x;
</script>
参数的值传递:
在函数外定义的参数,如果在函数中修改参数的值,将不会修改参数的初始值(或者说定义值)。
因此,JavaScript函数传值只是将参数的值传入函数,函数会另外配置内存保存参数值,所以并不会改变原参数的值
var x = 1;
// 通过值传递参数
function myFunction(x) {
x++; //修改参数x的值,将不会修改在函数外定义的变量 x
console.log(x);
}
myFunction(x); // 2
console.log(x); // 1
参数的对象传递:
在JavaScript中可以引用对象的值,因此我们在函数内部修改对象的属性就会修改其初始的值。
var obj = {x:1};
// 通过对象传递参数
function myFunction(obj) {
obj.x++; //修改参数对象obj.x的值,函数外定义的obj也将会被修改
console.log(obj.x);
}
myFunction(obj); // 2
console.log(obj.x); // 2
总结:
- 参数的值传递,不改变变量的初始值
- 参数的对象传递,改变对象的初始值
6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递的更多相关文章
- python 匿名函数&内置函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...
- ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数
一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python学习day11 函数Ⅲ (内置函数与lambda表达式)
函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...
- Python学习笔记014——迭代工具函数 内置函数enumerate()
1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...
- Python学习(五)函数 —— 内置函数 lambda filter map reduce
Python 内置函数 lambda.filter.map.reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python 的 lambda.fil ...
- python 函数--内置函数
一.内置函数 内置函数是python自带的一系列常用函数. 二.python3中内置函数 内置功能 abs() delattr() hash() memoryview() set() ...
- JavaScript 标准内置对象Promise使用学习总结
Javascript标准内置对象Promise使用学习总结 by:授客 QQ:1033553122 1. 基础用法 var condition = true; let p = new Prom ...
- 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式
JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMASc ...
随机推荐
- Tarjan-有向图
(我到底是咕了多少知识点啊) 在有向图中tarjan主要用来求强连通分量并缩点 一.定义 强连通:如果两个顶点可以相互通达,则称两个顶点 强连通 强连通分量:如果有向图G的每两个顶点都 强连通,称G是 ...
- 【visio】 图片
1.背景页设置 新建背景页:新建页面>设计>页面设置>页属性 使用背景页:在页属性页的"背景" 选项里,选择需要的背景. 2.插入图片 支持插入本地图片 ...
- MAC平台基于Python的Appium环境搭建
前言 最近笔者要为python+appium课程做准备,mac在2019年重新安装了一次系统,这次重新在mac下搭建appium环境,刚好顺带写个文稿给大家分享分享搭建过程. 一.环境和所需软件概述 ...
- markdown区块
Markdown 区块 Markdown 区块引用是在段落开头使用 > 符号 ,然后后面紧跟一个空格符号: > 区块引用 > 菜鸟教程 > 学的不仅是技术更是梦想 显示结果如下 ...
- 【C语言】计算N名同学的某门功课的平均成绩
分析: 循环输入number只童鞋的成绩,累加为sum,最后输出sum/number即可! 代码: #include<stdio.h> int main() { , score;//sco ...
- centos7.5下安装jenkins
最近从头搭建了一套python+selenium+pytest+allure+Jenkins的环境,虽然网上挺多的,不过还是记录下来,毕竟坑还是挺多的....... 先从搭建jenkins开始把! 方 ...
- sqlite3 install 和使用
windows: 在 Windows 上安装 SQLite 请访问 http://www.sqlite.org/download.html,从 Windows 区下载预编译的二进制文件. 您需要下载 ...
- 如何在应用程序中使用ML.NET?
https://www.cnblogs.com/shanyou/p/9190701.html ML.NET以NuGet包的形式提供,可以轻松安装到新的或现有的.NET应用程序中. 该框架采用了用于其他 ...
- ASP.NET Core搭建多层网站架构【9.1-使用Autofac代替原生的依赖注入】
2020/01/30, ASP.NET Core 3.1, VS2019, Autofac.Extensions.DependencyInjection 5.0.1 摘要:基于ASP.NET Core ...
- Tensorflow机器学习入门——常量、变量、placeholder和基本运算
一.这里列出了tensorflow的一些基本函数,比较全面:https://blog.csdn.net/M_Z_G_Y/article/details/80523834 二.这里是tensortflo ...