JavaScript⑤函数
栏目: JavaScript · 发布时间: 8年前
内容简介: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函数匿名函数
- 纯函数:函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Vim, Second Edition
Drew Neil / The Pragmatic Bookshelf / 2015-10-31 / USD 29.00
Vim is a fast and efficient text editor that will make you a faster and more efficient developer. It’s available on almost every OS, and if you master the techniques in this book, you’ll never need an......一起来看看 《Practical Vim, Second Edition》 这本书的介绍吧!