您当前的位置: 首页 > 

暂无认证

  • 2浏览

    0关注

    93505博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JS函数(号称最全最详解包括es6)

发布时间:2020-10-29 00:05:01 ,浏览量:2

第一绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //什么是函数? /*
        1.什么是函数?
        函数是专门用于封装代码的, 函数是一段可以随时被反复执行的代码块

        2.函数格式
        function 函数名称(形参列表){
            被封装的代码;
        }
        */ function toLeft() { console.log("打左转向灯"); console.log("踩刹车"); console.log("向左打方向盘"); console.log("回正方向盘"); } function toRight() { console.log("打右转向灯"); console.log("向右打方向盘"); console.log("回正方向盘"); } toLeft(); // 向右变道 toRight(); // 向左变道 toLeft(); </script> </body> </html> 

优点:减少重复代码。。 在这里插入图片描述

第二绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //减少重复的代码把。 function getSum(a,b) { let res=a+b; return res; } let num1 = 10; let num2 = 20; let result = getSum(num1, num2); console.log(result); </script> </body> </html> 

在这里插入图片描述

第三绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function getSum(a, b) { console.log(a, b); return a + b; } let res = getSum(10, 20) </script> </body> </html> 

在这里插入图片描述

//记住,核心是return返回的值返回到原来调用的函数的地方哈,然后传给res.

//关于函数可以有形参变量也可以没有形参变量,没有就是0,有就是等于大于1 //什么是形参? //定义function时的右边的括号()里面的参数叫做形参. //比如 //function say() //{ // //} //一个函数function中可以有返回值也可以没有. //函数没有通过return明确返回值, 默认返回undefined /4.return的作用和break相似, 所以return后面不能编写任何语句(永远执行不到) // break作用立即结束switch语句或者循环语句 // return作用立即结束当前所在函数 / 什么是实参? 调用函数时把值传入function里面的形参里面,我们把值叫做实参. function getSum(a, b) { console.log(a, b); return a + b; } // let res = getSum(10, 20); //定义实参的目的是把值传给形参. //示例一下 */

第四绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function getSum() { console.log(arguments); console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]); } let res = getSum(10, 20, 30, 40); console.log(res); </script> </body> </html> 

在这里插入图片描述

// 注意点: 每个函数中都有一个叫做arguments的东东 //arguments其实是一个伪数组

/*
    1.因为console.log();也是通过()来调用的, 所以log也是一个函数
    2.log函数的特点
        可以接收1个或多个参数
    3.为什么log函数可以接收1个或多个参数
        内部的实现原理就用到了arguments
    4.arguments的作用
        保存所有传递给函数的实参
    */

第五绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> let [a, ...b] = [1, 3, 5]; console.log(a,b); let arr1 = [1, 3, 5]; let arr2 = [2, 4, 6]; let arr = [...arr1, ...arr2]; console.log(arr); function getSum(...values,a) { console.log(a); console.log(values); } getSum(10, 20 , 30); //最后的报错 </script> </body> </html> 

在这里插入图片描述

/1.扩展运算符在等号左边, 将剩余的数据打包到一个新的数组中 注意点: 只能写在最后/ //2.扩展运算符在等号右边, 将数组中的数据解开 //注意点: 和在等号左边一样, 也只能写在形参列表的最后 /function getSum(…values) { console.log(values); } let res = getSum(10, 20, 30, 40);/

第六绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function getSum(a = "贵哥的编程之路", b = getDefault()) { console.log(a, b); } getSum(); // getSum(123, "abc"); function getDefault() { return "陈业贵" } </script> </body> </html> 

在这里插入图片描述

// 从ES6开始, 可以直接在形参后面通过=指定默认值 // 注意点: ES6开始的默认值还可以从其它的函数中获取

第七绝·:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> /*let say=function()
		{
			 console.log("hello world");
		}
		say();
		let fn=say;
		fn();
		 // 将函数作为其他函数的参数
        function test(fn) { // let fn = say;
            fn();
        }*/ /*function test()
        {
        	let say=function()
        	{
        		console.log("牛逼");
        	}
        	return say;
        }
        let fn=test();
        fn();*/ //这个可以解析为: function test() { return function() { console.log("牛逼"); }; } let fn=test(); fn(); //好了完成 </script> </body> </html> 

在这里插入图片描述

第八绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS匿名函数核心 16</title> </head> <body> <script> /*
        1.什么是匿名函数?
        匿名函数就是没有名称的函数
		*/ //第一作为其他函数的参数 /*function say(fn)//fn=
	{
		fn();
		//这一步相当于
		function()
		{
			console.log("hello  world");
		}();
		//注意点就是必须在匿名函数的前后加上小括号。这是写法.
	}
	say(function()
	{
		console.log("hello  world");
	});*/ //解析:..... /*(function()
	{
		console.log("hello  world");
	})();*/ //第二作为其他函数的返回值 /*
        function test() {
            return function () {
                console.log("hello lnj");
            };
        }
        let fn = test(); // let fn = say;
        fn();
        */ //下面为解析,加个变量即可: function test() { let say= function () { console.log("hello lnj"); }; return say; } let fn = test(); // let fn = say; fn();//这一步相当于 (function () { console.log("hello lnj"); })(); //完成 </script> </body> </html> 

在这里插入图片描述

第九绝:

/*4.箭头函数的注意点 4.1在箭头函数中如果只有一个形参, 那么()可以省略 4.2在箭头函数中如果{}中只有一句代码, 那么{}也可以省略 */

第十绝:

Document

在这里插入图片描述

第十一绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function login() { let pwd = prompt("请输入密码"); if(pwd!=="123456") { login(); } alert("欢迎回来"); } login(); </script> </body> </html> 

/*1.什么是递归函数? 递归函数就是在函数中自己调用自己, 我们就称之为递归函数 递归函数在一定程度上可以实现循环的功能

2.递归函数的注意点
    每次调用递归函数都会开辟一块新的存储空间, 所以性能不是很好
    */

第十二绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function login() { let pwd = prompt("请输入密码"); if(pwd!=="123456") { login(); } alert("欢迎回来"); } login(); </script> </body> </html> 

/*1.什么是递归函数? 递归函数就是在函数中自己调用自己, 我们就称之为递归函数 递归函数在一定程度上可以实现循环的功能

2.递归函数的注意点
    每次调用递归函数都会开辟一块新的存储空间, 所以性能不是很好
    */

在这里插入图片描述

在这里插入图片描述

第十三绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>80-JavaScript-变量作用域</title> <script> /*
        1.在JavaScript中定义变量有两种方式
        ES6之前: var 变量名称;
        ES6开始: let 变量名称;
        */ // 2.两种定义变量方式的区别 // 2.1是否能够定义同名变量 /*
        1.通过var定义变量,可以重复定义同名的变量,并且后定义的会覆盖先定义的
        var num = 123;
        var num = 456;
        console.log(num);

        2.2如果通过let定义变量,  "相同作用域内"不可以重复定义同名的变量
        let num = 123;
        let num = 456; // 报错
        */ // 2.2是否能够先使用后定义 /*
        2.3通过var定义变量, 可以先使用后定义(预解析)
        console.log(num);
        var num = 123;

        2.4通过let定义变量, 不可以先使用再定义(不会预解析)
        console.log(num); // 报错
        let num = 123;
        */ // 2.3是否能被{}限制作用域 /*
        2.5无论是var还是let定义在{}外面都是全局变量
        var num = 123;
        let num = 123;

        2.6将var定义的变量放到一个单独的{}里面, 还是一个全局变量
        {
            var num = 123;
        }
        console.log(num);  //不会报错

        2.7将let定义的变量放到一个单独的{}里面, 是一个局部变量
        {
            let num = 123;
        }
        console.log(num);  //会报错
        */ /*
        1.在JavaScript中{}外面的作用域, 我们称之为全局作用域

        2.在JavaScript中函数后面{}中的的作用域, 我们称之为"局部作用域"
        3.在ES6中只要{}没有和函数结合在一起, 那么应该"块级作用域"
        4.块级作用域和局部作用域区别
        4.1在块级作用域中通过var定义的变量是全局变量
        4.2在局部作用域中通过var定义的变量是局部变量

        5.无论是在块级作用域还是在局部作用域, 省略变量前面的let或者var就会变成一个全局变量
        */ /*
        {
            // 块级作用域
        }
        if(false){
            // 块级作用域
        }
        while (false){
            // 块级作用域
        }
        for(;;){
            // 块级作用域
        }
        do{
            // 块级作用域
        }while (false);
        switch () {
            // 块级作用域
        }
        function say() {
            // 局部作用域
        }
        */ /*
        {
            // 块级作用域
            var num = 123; // 全局变量
        }
        console.log(num);

        function test() {
            var value = 666; // 局部变量
        }
        test();
        console.log(value);
        */ /*
        if(true){
            var num = 666;
        }
        console.log(num);
        */ /*
        {
            // var num = 678; // 全局变量
            // let num = 678; // 局部变量
            num = 678; // 全局变量
        }
        console.log(num);
        */ function test() { // var num = 123; // 局部变量 // let num = 123; // 局部变量 num = 123; // 全局变量 } test(); console.log(num); </script> </head> <body> </body> </html> 

在这里插入图片描述

第十四绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //var num=666;//0级作用域 function demo() { var num=123;//一级作用域 function test() { //var num=789;//二级作用域 console.log(num); } test(); } demo(); </script> </body> </html> 

/* 注意点: 初学者在研究"作用域链"的时候最好将ES6之前和ES6分开研究

1.需要明确:
    1.ES6之前定义变量通过var
    2.ES6之前没有块级作用域, 只有全局作用域和局部作用域
    3.ES6之前函数大括号外的都是全局作用域
    4.ES6之前函数大括号中的都是局部作用域

    2.ES6之前作用域链
    2.ES6之前作用域链
    1.1.全局作用域我们又称之为0级作用域
    2.2.定义函数开启的作用域就是1级/2级/3级/...作用域
    2.3.JavaScript会将这些作用域链接在一起形成一个链条, 这个链条就是作用域链
      0  --->  1 ---->  2  ---->  3 ----> 4
    2.4.除0级作用域以外, 当前作用域级别等于上一级+1

    3.变量在作用域链查找规则
    3.1先在当前找, 找到就使用当前作用域找到的
    3.2如果当前作用域中没有找到, 就去上一级作用域中查找
    3.3以此类推直到0级为止, 如果0级作用域还没找到, 就报错
    */

在这里插入图片描述

第十六绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> // 全局作用域 / 0级作用域 //let num=123; { let num=456; function test() { //let num=789; console.log(num); } test(); } </script> </body> </html> 

/* 注意点: 初学者在研究作用域的时候最好将ES6之前和ES6分开研究

1.需要明确:
    1.ES6定义变量通过let
    2.ES6除了全局作用域、局部作用域以外, 还新增了块级作用域
    3.ES6虽然新增了块级作用域, 但是通过let定义变量并无差异(都是局部变量)

    2.ES6作用域链
    1.1.全局作用域我们又称之为0级作用域
    2.2.定义函数或者代码块都会开启的作用域就是1级/2级/3级/...作用域
    2.3.JavaScript会将这些作用域链接在一起形成一个链条, 这个链条就是作用域链
      0  --->  1 ---->  2  ---->  3 ----> 4
    2.4.除0级作用域以外, 当前作用域级别等于上一级+1

    3.变量在作用域链查找规则
    3.1先在当前找, 找到就使用当前作用域找到的
    3.2如果当前作用域中没有找到, 就去上一级作用域中查找
    3.3以此类推直到0级为止, 如果0级作用域还没找到, 就报错
    */

第十六绝:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //怎么写预解析代码? var num; console.log(num); num=123; // 如果将函数赋值给一个var定义的变量, 那么函数不会被预解析, 只有变量会被预解析 //核心:是先解析完代码,然后再执行。 </script> </body> </html> 

在这里插入图片描述 /* 1.什么是预解析? 浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码 也就是说浏览器不会直接执行代码, 而是加工处理之后再执行, 这个加工处理的过程, 我们就称之为预解析

2.预解析规则
    2.1将变量声明和函数声明提升到当前作用域最前面
    2.2将剩余代码按照书写顺序依次放到后面

    3.注意点
    通过let定义的变量不会被提升(不会被预解析)
    */
     // 如果将函数赋值给一个var定义的变量, 那么函数不会被预解析, 只有变量会被预解析
    //核心:是先解析完代码,然后再执行。
关注
打赏
1655258400
查看更多评论
立即登录/注册

微信扫码登录

0.0568s