认识函数
1.定义函数:
- /*
- 声明式定义函数:
- function 函数名(){}
- 函数名:自己定义,命名规则和规范同变量(不能以数字开头,极度推荐驼峰命名方法,比如:shouBiao)
- () :必须带
- {}: 代码块
- 赋值式定义函数
- var 函数名= function(){}
- 1.3 注意:函数不调用不执行
- */
- // 2. 调用函数: 函数名();
-
函数一旦被调用,{}内部的代码会执行
函数的参数
- // 函数的参数:有时候呀,我们根据传入不同的数据,得到的结果也不一样,函数的参数可以解决这种问题
- // 函数的参数的分为:
- // 形参:函数定义时()中的参数叫形参
- // 实参:函数调用的时候()的参数叫实参
- // 参数的个数可以是0个或者多个
- // 函数调用时,就将实参传递给形参
- // function getSum(形参){}
- // getSum(实参)
函数的返回值
- // 函数特点:函数内部定义的变量,函数外部访问不到
- // 函数的返回值:有的时候,我们想让函数给我们返回出来一个结果,就可以使用return
- // 使用方式:在函数定义的 最底部,通过return 把结果带出来
- // 带返回值的函数:函数调用(getSum())的结果就是return 后的结果(sum) getSum()==sum
函数的中断
- / return : 1、返回函数的运算结果
- // 2、终止函数的执行
- // 3、任何函数都有return,如果用户不写,函数内部的最低端默认有一行 return undefined;
例子:sum(); //一层含义:只调用函数
console.log(getsum());//两层含义:1、 调用函数 ,2、输出函数的返回值
<!-- 定义函数,求10的阶乘 -->
<!-- <script>
function cj() {
var sum=1;
for(i=10;i>=1;i--){
sum=sum*i
}
document.write(sum)
}
cj()
</script> -->
作用域:
// 作用域:一段代码生效的范围 | |
// 1. 全局作用域: | |
// 1.1 位置:变量定义在script标签内,函数外部的区域,具有全局作用域,拥有全局作用域的变量可以在任何地方访问到 | |
// 1.2 生命周期: 打开一个页面就产生了一个全局作用域,页面关闭,全局作用域就销毁(抽象的概念) | |
// 1.3 注意:全局作用域中有一个叫window的对象,可以直接访问的 | |
// 2. 局部作用域(函数作用域) | |
// 2.1 位置:定义在函数内部,拥有局部作用域,变量只能函数内部访问,函数外部访问不到 | |
// 2.2 生命周期:局部作用域在函数调用时产生,函数调用结束销毁 | |
// 2.3 注意:只有定义在函数内部的变量拥有局部作用域,在if(){}或者for(){}没有局部作用域 | |
变量的访问规则:
// 变量的访问规则: | |
// 先访问当前作用域下有没有定义变量,没有的话向上查找 | |
// var x = 10; | |
// function fn(){ | |
// var x = 20; | |
// console.log(x); //20 | |
// } | |
// fn(); | |
// console.log(x);//10 | |
// 变量的赋值规则: | |
// 先访问当前作用域下有没有定义变量,有的话,就给当前作用域的变量赋值,没有的话,向上查找 | |
预解析:提前解释代码:
// 预解析:提前解释代码 | |
// 浏览器内核:渲染引擎(解释html和css)和js引擎(解释性语言,从上向下一行一行解释说明) | |
// js引擎在执行js代码的时候,把var 和function提升到当前作用域的最顶端 | |
// 变量提升的只是声明部分 | |
// 函数提升(提升的声明式 ===》 function fn(){}),提升函数整体 | |
// 函数提升优先于变量提升 | |
递归:
// 递归:在函数内部直接或者间接的调用函数本身 | |
// 递归需要有出口,没有出口就形式死递归(Maximum call stack size exceeded : 栈溢出) | |
// 终止函数:return; | |
// 终止循环:break; |