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 ...
随机推荐
- 压缩/批量压缩/合并js文件
写在前面 如果文件少的话,直接去网站转化一下就行. http://tool.oschina.net/jscompress?type=3 1.压缩单个js文件 cnpm install uglify-j ...
- layui+ajax+select
1.看效果 2.前端代码 <div class="layui-form-item"> <label class="layui-form-label&qu ...
- max=(a>b)?a:b;
这个函数的意思是如果a>b,max=a:否则max=b. 实际程序: while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Sta ...
- 用vscode写c/c++
用vscode写c/c++ 1. 安装wsl windows下安装linux(ubuntu) 2. 打开设置 3. 输入run code 随便找一个地方粘贴,会出现一大段代码 4. 把c对应的代码修改 ...
- 吴裕雄 python 机器学习——模型选择学习曲线learning_curve模型
import numpy as np import matplotlib.pyplot as plt from sklearn.svm import LinearSVC from sklearn.da ...
- Android学习04
Toast Toast是Android系统提供的一种非常好的提示方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何的屏幕空间. 1.默认Toast 在 ...
- Java面向对象编程 -6
数组的基本概念 数组的本质:一组相关变量的集合. 但是需要注意的一点是:在java里面讲数组定义为了引用数据类型,所以数组的使用一定要牵扯到内存分配,那么首先一定要想到使用关键字new来处理 数组的定 ...
- java 面试题 mybatis 篇
1. 一级缓存和二级缓存? 一级缓存策略: 二级缓存策略: 2. 缓存回收策略 LRU – 最近最少使用的:移除最长时间不被使用的对象. FIFO – 先进先出:按对象进入缓存的顺序来移除它们. ...
- 消息队列(四)--- RocketMQ-消息发送
概述 RocketMQ 发送普通消息有三种 可靠同步发送 可靠异步发送 单向(oneway)发送 :只管发送,直接返回,不等待消息服务器的结果,也不注册回调函数,简单地说,就是只管发,不管信息是否发送 ...
- 【PAT甲级】1079 Total Sales of Supply Chain (25 分)
题意: 输入一个正整数N(<=1e5),表示共有N个结点,接着输入两个浮点数分别表示商品的进货价和每经过一层会增加的价格百分比.接着输入N行每行包括一个非负整数X,如果X为0则表明该结点为叶子结 ...