JavaScript⑤函数
栏目: JavaScript · 发布时间: 7年前
内容简介:JavaScript⑤函数
ECMAScript中的函数使用 function 关键字来声明,后跟一组参数以及函数体。
// 基本的语法 function functionName(argument1,argument2){ /*一堆的代码*/ } //下面是函数的一个实例, function diff(a,b){ console.log(a-b); } diff(10,5);//输出5 diff(20,2);//输出18
函数还有一个属性,就是可以return;ECMAScript中函数在定义的时候,不要求函数是否返回一个值,但是每个函数都有return的权利;任何函数在任何时候都可以通过return语句返回的值来实现把值返回给外部变量。
function diff(a,b){ return a-b; } var diffNumber=diff(10,5); console.log(diffNumber);
函数的返回值只能通过return来返回,除了return以外,没有任何声明可以表示返回值,无论return在哪里,只要有执行了return同一条的代码后,函数立即停止,并且立即退出,因此位于return语句之后的人和代码都永远不会执行;
return语句可以不带任何返回值,这种情况下,函数返回值是undefined;这种写法,一般用在需要提前停止函数又不需要返回值的情况下。
函数的定义
- function语句的定义方法
- 函数直接量的定义方法
- 构造函数的定义方法
//function语句的定义方法 function test1(arg1,arg2){ console.log("function语句的定义方法:",arg1+arg2); return; } //函数直接量的定义方法 var test2 = function(arg1,arg2){ console.log("函数直接量的定义方法:",arg1+arg2); return; } //构造函数的定义方法 var test3 = new Function("arg1","arg2","console.log('构造函数的定义方法:',arg1+arg2)");
函数的重载
ECMAScript 函数不能实现重载,ECMAScript 没有函数签名,因为其参数是由包含0 或者多个值的数组来表示的。如果在 ECMAScript 中定义了两个名字相同的参数,则该名字只属于后定义的函数。
function add(num){ return num + 100; } function add(num){ return num + 200; } var ret = add(100); console.log(ret); //300
函数的调用
直接调用:函数名(实参列表)
function test1(arg1,arg2){ console.log("function语句的定义方法:",arg1+arg2); return; } //直接调用 test1(1,2);//function语句的定义方法: 3
在链接中调用
<body> <buttontype="button"name="button"onclick="test1(9,9)">click me</button> <script> function test1(arg1,arg2){ console.log("function语句的定义方法:",arg1+arg2); return; } </script> </body>
在事件中调用
<body> <buttontype="button"name="button"id="btn1">click me</button> <script> var oBtn1=document.getElementById("btn1"); oBtn1.onclick=function(){ test1(2,2) }; function test1(arg1,arg2){ console.log("function语句的定义方法:",arg1+arg2); return; } </script> </body>
递归调用
在函数内部调用函数自身
<buttontype="button"name="button"id="btn1">click me</button> <script> var oBtn1=document.getElementById("btn1"); oBtn1.onclick=function(){ test1(10,1); }; function test1(arg1,arg2){ console.log("最开始的调用方法",arg1+arg2); arg1--; if(arg1>0){ test1(arg1,arg2) } return; } </script>
arguments对象
功能
存放实参的参数列表
test1(1,2);//[1,2] test1(1,2,3,4,5);//[1, 2, 3, 4, 5] function test1(){ console.log(arguments); } //{ '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }
argutments 在普通模式里,可以在函数内部修改函数的值;在严格模式下,函数内部不能修改argument的值,即使修改了,操作也是无效的;其次重写arguments值会导致语法错误,代码不执行;
特性
仅能在函数体内使用
test1(1,2);//[1,2] function test1(){ console.log(arguments); } console.log(arguments);//arguments is not defined
函数声明时自动初始化
属性
length:获取函数实参的长度
test1(1,2,3,4,5);// 输出5 function test1(){ console.log(arguments.length); }
this关键字的指向
- this:指向当前操作对象;
- callee:指向正在执行函数的指针;
函数表达式
匿名函数
创建一个函数并把它赋值给变量,这种情况下创建的函数叫做 匿名函数 。
var sayHi; sayHi = function(num){ console.log("sayHi " + num); } sayHi(1); //sayHi 1
//创建一个匿名函数并立即执行 var ret = (function(x,y){ return x * y; })(3,8); console.log(ret); //24
函数闭包
闭包是指有权访问另一个 函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
function lazy_sum(arr){ var sum = function(){ return arr.reduce(function(x,y){ return x * y; }); } return sum; } var f = lazy_sum([1,2,3,4,5]); //返回的是求和函数 console.log(f()); //调用函数f计算求和
借助闭包,可以封装一个私有变量
//闭包实现计数器 function create_counter(initial){ var x = initial || 0; return { inc: function(){ x += 1; return x; } } } var counter1 = create_counter(); console.log(counter1.inc()); //1 console.log(counter1.inc()); //2 console.log(counter1.inc()); //3 var counter2 = create_counter(10); console.log(counter2.inc()); //11 console.log(counter2.inc()); //12 console.log(counter2.inc()); //13
闭包还可以把多参数的函数变成单参数的函数。
function make_pow(n){ return function(x){ return Math.pow(n,x); } } //创建两个新函数 var pow1 = make_pow(2); var pow2 = make_pow(3); console.log(pow1(2)); // 4 console.log(pow2(2)); // 8
箭头函数
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
x => x * x
上面的箭头函数相当于
function (x) { return x * x; }
使用
'use strict'; var fn = x=> x * x; console.log("箭头函数 "+ fn(3));
高阶函数
JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。一个最简单的高阶函数:
function addHigh(x, y, f){ return f(x) + f(y); } console.log(addHigh(-4,-5,Math.abs)); //9
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
- python基础教程:函数,函数,函数,重要的事说三遍
- C++函数中那些不可以被声明为虚函数的函数
- 017.Python函数匿名函数
- 纯函数:函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社交电商
[美] Stephan Spencer(斯蒂芬.斯宾塞)、[美] Jimmy Harding(吉米.哈丁)、[美] Jennifer Sheahan(詹尼弗.希汉) / 谭磊 / 电子工业出版社 / 2015-3 / 69.00元
你想要在互联网上赚钱吗?想要做好电子商务吗?那么你一定不能忽视社交媒体的力量。不管你想要营销的是实物商品、电子类产品还是本地的服务,这本书会教你怎么做。 《社交电商》全面介绍形形色色的社交媒体以及如何利用这些社交媒体来为你的企业做好服务。如果你经营得不好,在社交媒体上散发出的只是噪声而不是真正的信息。 而如果做得好,社交媒体会成为你最有效的营销工具,帮助你赢得老客户的拥戴,获得新的客户。 ......一起来看看 《社交电商》 这本书的介绍吧!