function函数
初识函数,通俗来讲函数是封装重复执行的代码块,函数的使用分为两个步骤,声明函数和调用函数(缺一不可)
声明函数:function函数名(){函数体,代码块}:注意点,声明函数的关键字一定要是小写,函数一般是为了实现某个功能,所以我们常用动词来命名函数
调用函数:函数名()
// 声明函数 function ins() { document.write('hello,function') } // 调用函数,如果之声明不调用的话,函数是永远不会执行 ins()
函数封装
函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,函数的作用,就是封装一段可执行代码,和一个或者多个功能
// 需求封装两个数的和,但是需要让用户输入 function f(a,b) { let a = +prompt('请输入第一个数字') let b = +prompt('请输入第二个数字') let c = 0 c = a + b document.write(c) } f(1,2)
函数参数
函数的参数:在声明函数的时候,可以在函数名称后边的小括号中添加一些参数,这些参数被称为形参(形式上的参数)
在调用函数时,同样也需要传递对应的参数,这些参数被称为实参
形参:函数定义时设置接收(调用)传入的实际参数值,类似于一个变量。补充说明,形式上的参数,函数定义的时候,接收传递的参数,当前并不知道是什么
实参:函数调用时传入小括号的真实数据。补充说明,实际上的参数,函数调用的时候,传递给形参的参数,实参时传递给形参的
多次使用函数调用的时候,每一个实际的参数互不干扰
函数的默认参数
如果用户不输入实参,两个形参时undefined,形参进行运算的结果时NaN
有实参就接收实参,没有实参选用默认参数。默认值就是(形参 = 0)
function f1(a,b) { console.log(a,b) let c = 0 for (let i = a; i <=b; i++) { // document.write(a) // c = a + b // a += b c = c + i //这里有一个注意点,我们是需要a到b的累加和,a加b是实参a+b 而不是里边i循环的累加和 } document.write(c) } f1(1,100) // 默认参数 function f(a = 0,b = 0) { //给一个默认参数 let he = 0 for (let i = a; i < b; i++) { he += i // he = a + b //这里把循环去掉是a = undefined b = undefined 相加为NaN } document.write(he) } f() f(1,5)
函数的数组操作
函数封装数组操作,也可以添加一个默认数组的参数 (形参=[])
// let arr = [1,3,5,7,9,5,8,10] function f(arr = []) { console.log(arr) //这里的arr就是整个数组 let he = 0 for (let i = 0; i < arr.length; i++) { he += arr[i] } document.write(he) } f([1,3,5,7,9,5,8,10]) f() //如果不传入数组参数,是没有arr.length的是会报错的,所以我们要给一个默认的空数组
实参时可以选择变量的
function name(a,b) { // console.log(name) let c = 0 for (let i = a; i <= b; i++) { c += i } document.write(c) } let e = +prompt('请输入开始的数') let d = +prompt('请输入结束的数') name(e,d)
形参和实参不匹配
形参和实参相等的情况下他们是会正常显示的
实参大于形参的情况下正常显示,但是多余的实参不会被显示出来,显示的顺序是从前往后
实参小于形参的情况下不正常显示,多余的形参参数是undefined
return返回值(重点)
函数的返回值return,执行完函数体以后把结果交给return,return会把结果返回给我们
return会终止函数,并且只返回它后边的数值,我们调用的是需要把整个函数调用都写出来log(函数名(实参1,实参2,。。。))
function name() { return 'hello,function' //函数运行到这里就停止了,把后边的结果返回给name() } document.write(name()) //把return后边的东西,返回到name()中,但是需要打印才出来 let res = name() name() document.write(res) function name1(a,b) { return a + b //return后边的返回值返回给函数调用者 } name1(1,3) document.write(name1(1,3))
return返回的的是函数的结果,直接调用,调用的是整个函数体,注意区别
函数细节
函数的名称相同的时候,下边的函数会覆盖掉上边的函数
function f() { document.write(1) } function f() { document.write(2) } f() //2 下边的覆盖上边的了 //return function f1() { return 66 alert('你好呀') //return下边的代码是不会执行的 } let res = f1 () console.log(res)
return的时候,return下边的代码是不会执行的
当你return多个返回值的时候,之后返回最后一个
//return下边的代码永远不会执行 //return多个 function f2(a,b) { // return a + b,a - b // 如果想返回多个就使用数组 return [a + b,a - b] } let se = f2(1,2) //这里返回值是-1 // return后边只能返回一个值,如果你硬要写多个,只会返回最后一个
当没有return或者return为空的时候,是没有返回值的,虽然有函数体,但是没有返回值,打印调用者就是undefined
function f3() { return } console.log(f3()) //返回数值是undefined function f4(a = 0,b = 0) { a + b } f4(1,2) console.log(f4(1,2)) //3
匿名函数
函数可以分为具有名称的命名函数,和没有名称的匿名函数
匿名函数:没有名字的函数,无法直接使用
// 函数表达式 let fun = function() { // console.log('函数表达式') return `函数表达式` } // fun() document.write(fun()) //不加括号反馈的是整个函数体 // 调用一定写在函数表达式下边 // 箭头函数 let fun1 = () => { return `函数表达式` } document.write(fun1())
立即执行函数
立即执行函数两种写法
(function(){ })()或者(function(){ } ())
多个立即执行函数写在一起的时候需要使用 ; 隔开不然会报错
立即执行函数使用场景,多个函数避免命名冲突的时候使用
(function () { console.log(`999`) })(); (function () { let name = `10` })(); (function (){ console.log(`888`) }())
作用域
什么是作用域,作用域就是代码或者变量的作用范围
全局作用域:从script开始到script结束,在它里边的叫全局作用域,全局声明的变量全局都可以使用
局部作用域:函数内部有效,叫局部作用域(函数作用域)
块级作用域:只要有花括号就有块级作用域
变量的特殊情况
在函数内部不声明,直接赋值,强烈不推荐
形参可以看作函数的局部变量
重点知识点,作用域链:内部函数访问变量,先在自身作用域中找声明,如果没有就往外层开始找,一直找到全局,如果有就会采取就近原则
全局变量和局部变量:
全局变量是浏览器关闭以后才结束的,局部变量是每次调用的时候创建的,调用结束以后删除
短路运算(逻辑中断)
注意点:0,null,NaN,``, undefined,false,这些都是为假,其余为真
逻辑与&& 短路 找假碰到假就会短路
只要碰到假就会短路,并且返回为假的值,只要短路,就不会继续执行后边的代码
逻辑或| | 短路 找真碰到真就会短路
只要碰到真就会短路,并且返回为真的值,只要短路,就不会继续执行后边的代码
console.log(2 && 1) //1 console.log(0 && 1) //0 console.log('' && 1) //'' console.log(null && 1) //null console.log( 3 || 5) //3 console.log( 0 || '') //'' console.log(3 - `3` || 4) //4
转换为布尔值
console.log(Boolean(`123`)) //true console.log(Boolean(`0`)) //true console.log(Boolean(`true`)) //true console.log(Boolean(`false`)) //true console.log(Boolean(``)) //false console.log(Boolean(null)) //false console.log(Boolean(undefined)) //false console.log(Boolean(NaN)) //false console.log(Boolean(0)) //false console.log(`pink`) //pink
标签:function,return,函数,let,console,log From: https://www.cnblogs.com/hgng/p/16880297.html