函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

1.JavaScript 函数语法

函数就是包裹在花括号中的代码块,前面使用了关键词 function:

  1. function functionname()
  2. {
  3. // 执行代码
  4. }

当调用该函数时,会执行函数内的代码。
可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。

2.调用带参数的函数

在调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:

  1. function myFunction(var1,var2)
  2. {
  3. 代码
  4. }

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

  1. <p>请点击其中的一个按钮,来调用带参数的函数。</p>
  2. <button onclick="myFunction('Harry Potter','Wizard')">点击这里</button>
  3. <button onclick="myFunction('Bob','Builder')">点击这里</button>
  4. <script>
  5. function myFunction(name,job)
  6. {
  7. alert("Welcome " + name + ", the " + job);
  8. }
  9. </script>

3.带有返回值的函数

有时,我们会希望函数将值返回调用它的地方。
通过使用 return 语句就可以实现。
在使用 return 语句时,函数会停止执行,并返回指定的值。

  1. function myFunction()
  2. {
  3. var x=5;
  4. return x;
  5. }

上面的函数会返回值 5。
注意: 整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。
函数调用将被返回值取代:

  1. var myVar=myFunction();

myVar 变量的值是 5,也就是函数 “myFunction()” 所返回的值。
即使不把它保存为变量,您也可以使用返回值:

  1. document.getElementById("demo").innerHTML=myFunction();

“demo” 元素的 innerHTML 将成为 5,也就是函数 “myFunction()” 所返回的值。
可以使返回值基于传递到函数中的参数:
计算两个数字的乘积,并返回结果:

  1. function myFunction(a,b){ return a*b;}
  2. document.getElementById("demo").innerHTML=myFunction(4,3);

“demo” 元素的 innerHTML 将是:12
在您仅仅希望退出函数时 ,也可使用 return 语句。返回值是可选的:

  1. function myFunction(a,b){
  2. if (a>b){
  3. return;
  4. }
  5. x=a+b
  6. }

如果 a 大于 b,则上面的代码将退出函数,并不会计算 a 和 b 的总和。

4.自调用函数

函数表达式可以 “自调用”。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:

  1. function show(){
  2. setTimeout(function(){
  3. console.log(1)
  4. show();
  5. },1000)
  6. }
  7. show()

5.函数参数

函数参数只在函数内起作用,是局部变量。

6.arguments 对象

JavaScript 函数有个内置的对象 arguments 对象。
argument 对象包含了函数调用的参数数组。
通过这种方式你可以很方便的找到最大的一个参数的值:

  1. x = sumAll(1, 123, 500, 115, 44, 88);
  2. function sumAll() {
  3. var i, sum = 0;
  4. for (i = 0; i < arguments.length; i++) {
  5. sum += arguments[i];
  6. }
  7. return sum;
  8. }

7.使用构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数。
这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:

  1. // 构造函数:
  2. function myFunction(arg1, arg2) {
  3. this.firstName = arg1;
  4. this.lastName = arg2;
  5. }
  6. // This creates a new object
  7. var x = new myFunction("John","Doe");
  8. x.firstName; // 返回 "John"

8.作为函数方法调用函数

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。
call()apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

  1. function myFunction(a, b) {
  2. return a * b;
  3. }
  4. myObject = myFunction.call(myObject, 10, 2); // 返回 20

9.重载

重载:就是根据参数的不同,动态决定调用哪个方法
js中没有重载的概念,因为重复声明,下面的会覆盖上面的声明

  1. function go(a){
  2. console.log(a);
  3. }
  4. function go(a,b){
  5. console.log(a+b);
  6. }
  7. go(10);
  8. go(10,20)

9-1 使用arguments模拟重载:

  1. function go(){
  2. if(arguments.length ==1){
  3. console.log(arguments[0])
  4. }else if(arguments.length == 2){
  5. console.log(arguments[0]+arguments[1])
  6. }
  7. }
  8. go(1)
  9. go(10,20)

10.解构

  1. 1.左边读取的字段,右手边必须有<br /> 2.读取的是右边的一个层级
  1. var obj = {
  2. name: "lisi", age: 18, skill: "vue",
  3. s: {
  4. sex: "male"
  5. }
  6. };
  7. // var name = obj.name;
  8. // var age = obj.age;
  9. // var skill = obj.skill;
  10. var { name,s} = obj;
  11. console.log(name)
  12. console.log(s.sex)

11. 箭头函数

  1. var go =()=>{
  2. console.log("hello world")
  3. }

11-1 带参数的箭头函数

  1. var test = (x)=>{
  2. console.log(x);
  3. }

11-2 箭头函数的简写

  1. var show = ()=>console.log("hello world");

11-3 带参数的简写

Tips:只有一个参数,可以省略小括号,只有一段表达式,可以省略大括号

  1. var main = x=>console.log(x);

12.回调函数

就是将函数作为参数,传递给另一个函数
场景:一般在异步调用中使用
作用:
1.将函数内部的值返回到外部
2.取代了return语句

  1. var show= function(res){
  2. console.log(res);
  3. }
  4. function go(callback){
  5. var a = 10;
  6. callback(a);
  7. }
  8. go(show);

示例

点击隐藏切换事件

  1. <style>
  2. .parent{
  3. width:200px;
  4. height: 200px;
  5. border:1px solid #333;
  6. position: relative;
  7. }
  8. .parent>div{
  9. width:100%;
  10. height: 100%;
  11. position: absolute;
  12. }
  13. .html{
  14. background-color: red;
  15. z-index: 100;
  16. }
  17. .css{
  18. background-color: yellow;
  19. }
  20. .current{
  21. color:orange;
  22. }
  23. li{
  24. cursor: pointer;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <ul>
  30. <li class="current">html</li>
  31. <li>css</li>
  32. </ul>
  33. <div class="parent">
  34. <div class="html">
  35. html
  36. </div>
  37. <div class="css">
  38. css
  39. </div>
  40. </div>
  41. <script>
  42. var lis = document.getElementsByTagName("li");
  43. //querySelectorAll()返回文档中匹配指定 CSS 选择器的所有元素
  44. var divs = document.querySelectorAll(".parent div");
  45. for(let i=0;i<lis.length;i++){
  46. lis[i].index = i;
  47. lis[i].onclick = function(){
  48. /* 1.遍历让所有的li移除class="current" */
  49. for(let i=0;i<lis.length;i++){
  50. lis[i].classList.remove("current");
  51. }
  52. /* 2.让当前元素添加class="current" */
  53. this.classList.add("current")
  54. console.log(this.index)
  55. /* 3.让所有的div隐藏 */
  56. for(let i=0;i<divs.length;i++){
  57. divs[i].style.display = "none"
  58. }
  59. /* 4.让对应的下标的div去显示 */
  60. divs[this.index].style.display = "block";
  61. }
  62. }
  63. </script>