函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
functionName: function(){} 冒号前面是函数也可简写functionName(){}花括号中是函数执行的代码块
带参数的函数,在调用带参数的函数时,你可以向其传递值,这些值称为参数。myFunction(argument1,argument2)当声明函数时,请把参数作为变量来声明:function myFunction(var1,var2){代码} 变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
首先要清楚函数的定义:
1、函数是一组可以随时随地运行的语句。2、函数是ECMAScript的核心。3、函数是由这样的方式进行声明的:关键字function、函数名、一组参数、以及置于花括号中的待执行代码。
函数基本的语法结构:function functionName(arg0,arg1,...argN){statements},函数可以通过其名字加上花括号中的参数进行调用,
局部JavaScript变量
1、在JavaScript函数内部声明变量(使用var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。
2、由于1中局部变量的特性,我们可以在不同的函数内使用相同变量名称,因为只有声明过该变量的函数才能识别出该变量,
3、在该函数运行结束后,函数体内部的本地变量就会被删除,也就是该变量只在声明它的函数体内部生效
全局JavaScript变量
在函数外部声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
重点:
带有返回值的函数: 有时,我们希望函数将计算的结果或者值返回调用它的地方。通过使用return语句就可以实现。在使用return语句时,函数会停止执行,并返回指定的值。当然整个JavaScript并不会停止执行,仅仅是函数。JavaScript将继续执行代码,从调用函数的地方。函数调用即将被返回值取代
如:function myFunction(a,b){
return a*b;
}
console.log(myFunction(3,4)); 打印结果: 12
JavaScript函数定义:
JavaScript使用关键字function定义函数。
函数可以通过声明定义,也可以是一个表达式。
函数声明 function functionName(parameters){执行的代码} 函数声明后不会立即执行,会在我们需要的时候调用。
函数表达式 JavaScript函数可以通过一个表达式定义。函数表达式可以存储在变量中:
例:var x = function(a,b){return a*b}; 此时函数表达式便存储在变量x中,打印x结果:function(a,b){return a*b}
同时,函数存储在变量后,变量也可以作为一个函数使用:
例:var x = function(a,b){return a*b}; var z = x(4,3);此时打印z变量结果:12
上述函数是一个匿名函数。函数存储在变量中,不需要函数名称,通常通过变量名来调用。
Function()构造函数
以往我们了解到的是函数通过关键字function定义。函数同样可以通过内置的JavaScript函数构造器定义。
例:var myFunction = new Function("a","b","return a * b"); 打印构造函数console.log(myFunction(4,3)); 打印结果:12
实际上我们可通过变量存储函数也能达到同等效果,如上可写成变量存储函数的方式
例:var myFunction = function(a,b){return a * b}; var x = myFunction(4,3); 打印结果:12
函数提升(Hoisting)
函数提升相同于变量提升,函数提升是JavaScript默认将当前作用域提升到前面去的行为。提升应用在变量的声明与函数的声明,因此函数可以在声明之前调用
自调用函数:函数表达式可以"自调用"。自调用的表达式会自动调用。如果表达式后面紧跟(),则会自动调用。不能调用声明的函数,通过添加括号,来说明它是一个函数表达式。
例:(function(){console.log("我自己调用了我自己,这种行为可以说我自己执行了这个函数")})();
打印结果:我自己调用了我自己,这种行为可以说我自己执行了这个函数
以上函数实际上是一个匿名自我调用的函数(没有函数名)。
函数可以利用存储在变量中的特性作为一个变量值使用
例:function myFunction(a,b){return a * b} var x = myFunction(4,3) * 2 打印结果:24
函数是对象,在JavaScript中使用typeof操作符判断函数的类型将返回"function".但是JavaScript描述为一个对象更加准确。JavaScript函数有属性和方法。arguments.length属性返回函数调用过程接收的参数个数。
例:funciton myFunction(a , b){returen arguments.length;} console.log(myFunction(3,4)) 打印结果:2
函数arguments对象
JavaScript函数有个内置的对象arguments对象。arguments对象包含了函数调用的参数数组。
例:通过arguments可以很方便的找到最大的一个参数的值。
x = findMax(1, 123, 500, 115, 44, 88);
function findMax(){
var i, max = arguments[0];
if(arguments.length < 2) { return max};
for(let i = 0;i < arguments.length;i++){
if(arguments[i] > max){
max = arguments[i];
}
}
return max;
}
console.log(x);
打印结果:500
或者利用arguments计算所有参数的和;
JavaScript函数闭包:由于函数块内变量在函数执行完就被删除,所以函数内部的变量只是函数自己在玩,当然声明在函数体外部的变量除外,当然我们也有处理的办法,那就是JavaScript内嵌套函数,理由如下:
1、所有函数都能访问全局变量。2、在JavaScript中,所有的函数都能访问它们上一层的作用域,意味着内层函数可以使用外层函数的变量,在将外层函数变量处理后改变外层函数变量的值,但是这样的话,我们的内层函数和外层函数都能执行一次,好像还不满足我们的需求,好在JavaScript提供的有函数的自我调用,
例:<button οnclick="myFunction">计数</button>
<script>
var add = (function(){
var counter = 0;
return function(){return counter += 1;}
})()
function myFunction(){
console.log(add());
}
</script>
变量add指定了函数自我调用的返回值。add变量可以作为一个函数使用。非常棒的部分