9.6_函数

※函数 function

目的:封装一段可重复调用的代码块 让大量代码重复使用

函数注意点:封装函数 不做过分兼容

使用方法:

声明函数:

// 1.命名函数
function 函数名(形参) {
	//执行代码 在需要函数返回数据时要通过return来返回
	return 需要返回的值/形参;
};
// 2.调用函数:函数名(实参);

// 在实际开发中的调用函数
var 变量名 = 函数名(实参/传入的数值);
console.log(变量名);
// 定义一个变量储存 在打印/输出的时候只要填写变量名就ok了 
// 1.函数表达式(匿名函数)
var 变量名 = function(形参) {...};

// 2.调用函数:变量名(实参);
// 函数表达式:变量名和普通变量不同 这里变量存的是函数 

注 :

  • 声明function名称全小写 函数名以动词命名
  • 不调用函数自身不会执行
  • 函数调用需要小括号
  • 函数两个括号内可以不写参数

函数的参数

参数可以无个数不限 参数之间用逗号隔开 形参和实参个数要匹配

形参:

  • 形参写在声明括号内

  • 接受实参的值

实参:

  • 写在调用括号内
  • 给形参传递实际数据
  • 实参个数多余形参个数 会丢掉多余的实参
  • 实参个数小于形参 形参没有接受到值 多余的形参默认未定义
  • 和数字相加会变成nan

函数返回值 return

作用:将最终结果返回给函数调用者

  • return 后的代码不被执行
  • 只能返回结果是 最后一次运行结果的值
  • 返回一个以上的值可以用数组
  • 函数没有return返回的是未定义
// 语法:
function 函数名() {
	return 需要返回的值;
}
console.log(函数名()); //调用者 返回的值

在这里插入图片描述

调用函数

函数可以互相调用

function 函数名1() {
	// 函数体
	函数名2();//调用函数2
	// 函数体2
}
function 函数名2(){
	// 函数体
}
函数名1() // 函数1的调用

// 流程:先执行写在外层的调用 从上往下执行 先执行函数1的内容 调用了函数2 此时去往函数2调用里面的内容 在回到函数1 接着执行剩下的内容 

// 注:调用的函数名不能忘记小括号

通过榨汁机看透函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqSPqJG1-1577930336713)(9.6_函数.assets/1567751094594.png)]

函数作业

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJaPr9Vm-1577930336729)(9.6_函数.assets/1567751129137.png)]

arguments

  • 是函数的一个内置对象 只有函数有
  • 存储传递过来的全部实参
  • 不推荐使用 一般采用函数+数组代替
// 函数+数组
function sort(arr) {
	//函数体
	return arr;
}

var arr1 = sort([1, 4, 2, 9]);
console.log(arr1);

伪数组

  • 具有数组的数组长度的特性
  • 按照索引的方式来存储
  • 没有真正数组的方法pop push

标志变量

一个标志 一般在代码中用做一个开关 在代码结束后还需要用到结果的时候用标志变量

例:假设最先开始是对的 在经历了某个代码后 转换为了错了 就可以根据这个来判断它是否走了某个代码 来做一些其他操作

注: 里面不仅可以是布尔值 还可以是字符 数字等 依照代码的情况来定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUCsPzY1-1577930336733)(9.6_函数.assets/1567904140315.png)]

作用域

作用:限制名字起作用的域范围

优点:提高程序逻辑局部性 增强可靠性 减少名字冲突

作用域的两种:

  • **全局作用域:**整个script标签 或者单独的js文件
  • 注:没有声明的变量 = 全局变量
    • 只有浏览器关闭才会销毁
  • 函数作用域: (局部作用域):只在函数内部起作用
  • 注: 函数的形参也是局部变量
    • 函数运行完毕就会销毁

es5 js没有块级作用域:只有被函数包裹才有块级作用域 for循环在es6之前可以在循环外调用循环中里面的i

作用域链: 内部函数可以访问外部函数 实行就近查找

域解析 √

引擎会把变量和函数声明提升到当前作用域的最前面 代码从上往下执行 匿名函数没有提升

如何避免: 符合规范 先声明 后调用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0cOagR0-1577930336742)(9.6_函数.assets/1567759707816.png)]

注:函数提升里面的函数体跟着一起往上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6P12Pux8-1577930336746)(9.6_函数.assets/1567759707816_2.png)]

域解析案例4 √

		f1();
        console.log(c);
        console.log(b);
        console.log(a);

        function f1() {
            var a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        
        域解析后
         function f1() {
            var a = 9; // a是局部变量 所以外围不能获取数据 
            b = 9; //b c 是全局变量 所以外围的输出可以获取
            c = 9;
            console.log(a); //9
            console.log(b); //9
            console.log(c); //9
        }
        f1();
        console.log(c); //9
        console.log(b); //9
        console.log(a); //undefined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值