JavaScript 基础02-js函数

JS 函数

1. 函数的声明

  1. function 关键字方式
    function 函数名([形参]) {
    JS 代码
    
    }
  2. 表达式方式
    var 函数名 = function([形参]) {
    JS 代码
    
    }
  3. Function 构造函数方式
    var 函数名 = new Function(‘参数1’, ‘JS 代码’);

2. 调用函数

  • 加括号才是调用
  • 不加括号 是引用 该函数

3. JS 函数特点

  • 函数没有返回值 默认返回undefined
  • 函数可以重复定义的

4. JS 函数中的参数

  • 形参与实参
    • 实参个数 > 形参个数 多余的实参会被忽略
    • 实参个数 < 形参个数 未赋值的参数 会被自动赋值为 undefined
  • 参数的默认值
    • 在函数内部判断 是否是undefined. 做赋值
  • 可变参数个数
    • arguments 获取所有传递的是参数,是一个数组对象

5. JS 中的变量作用域 全局和局部变量

  • 在函数内 使用 var 定义的是 局部变量
  • 在函数外 使用 var 定义的是 全局变量
  • 在函数内/外 不使用 var 定义的是 全局变量

6. JS 的作用域链

函数的执行 依赖于变量的作用域

这个作用域是在 函数定义声明时决定的,而不是 函数调用时决定的!

  • 如果当前作用域里 没有声明变量,则向上一层作用域里面找.
  • 如果直到找到全局里 还都未找到,则在执行函数时 会报错.

7. 自执行函数 与 闭包

7.1 自执行

1
2
( function(){console.log(1)} )()
( function(){console.log(2)} () )

这种写法的含义是将函数声明转换成函数表达式,消除了 JS 引擎识别函数表达式和函数声明的歧义.

它告诉 JS 引擎这是一个函数表达式,不是函数声明。并且可以在后面加括号,立即执行函数的内的代码.

7.2 闭包

简单说,闭包就是 能够读取 其他函数内部变量的 函数。

由于在 JS 中,只有函数内部的 子函数 才能读取 局部变量,
因此可以把闭包 简单理解成 “定义在一个 函数内部的 函数”。

所以,在本质上,闭包就是将 函数内部 和 函数外部 连接起来的一座桥梁。

闭包的最大用处有两个

  1. 一个是可以读取 函数内部的变量,
  2. 另一个就是 让这些变量的值 始终保持在内存中。

特效-倒计时同意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<h3>10s倒计时生效按钮</h3>
<button id="btn" disabled onclick="alert('已同意!')">同意(10)</button>

<script>
m = 10;
function showbtn() {
var btn = document.getElementById('btn');
if (m <= 0) {
btn.disabled = false;
btn.innerHTML = '同意';
return;
}
btn.innerHTML = '同意('+m+')';
m--;
setTimeout("showbtn()", 1000);
}

showbtn();

</script>