目录
封装定义:函数的封装,将需要重复使用的代码块使用函数进行封装, 等到下次需要使用的时候只需要 调用函数就可以了
封装定义:函数的封装,将需要重复使用的代码块使用函数进行封装, 等到下次需要使用的时候只需要 调用函数就可以了
调用:函数不调用不执行
函数的复用代码和循环重复代码的区别:
循环代码写完即执行,不能很方便控制执行位置
函数随时调用,随时执行,可重复调用
函数:function,是执行特定任务的代码块
作用
精简代码方便复用
声明语法:
function 函数名(){
函数体
}
函数名命名规范:
-
和变量命名基本一致
-
尽量小驼峰式命名法
-
前缀应该为动词
-
命名建议:常用动词约定函数的调用语法 :声明(定义)的函数必须调用才会真正被执行,使用 () 调用函数
// function 函数名(){ // 函数体 // } //例 function fn(){ document.write('hai~~') } //函数调用 :函数名() //函数一次声明可以多次调用,每一次函数调用函数体里面的代码就会重新执行一次 fn() fn()
我们曾经使用的 alert() , parseInt() 这种名字后面跟小括号的本质都是函数的调用
函数体:
函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函数的功能代码都要写在函数体当中。
function fn(){
document.write('hai~~') //函数体
}
fn()
函数传参
作用:可以极大提高函数的灵活性
形参实参
- 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
- 实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
-
形参可以理解为是 在这个函数内声明的 变量 (比如 num1 = 10)实参可以理解为是给这个变量赋值
-
开发中尽量保持形参和实参个数一致
-
alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参
函数体的逻辑中断
用户如果没有输入数据 实参就没有被赋值 形参也就不被赋值,就是undefined 当被调用和在页面中打印的时候就会出现NaN,为了避免出现这种情况 我们需要添加逻辑中断
// 带有参数的函数
// function getSum(参数1, 参数2...) {
// }
// getSum(参数1,参数2...)
// 声明
// x 和 y 我们怎么理解 函数内变量
// 如果一个变量没有赋值,则默认为 undefined
document.write(undefined + 10)
document.write(undefined + true)
document.write(undefined + undefined)
document.write(undefined + null)
document.write(undefined + 'red')
// 什么时候当假看 0 undefined null '' false NaN
document.write('<br>-------------------------------')
function getSum(x, y) {
// x = 1
// document.write(x)
// document.write(x + y)
// 我们想要:如果调用的时候,我们没有传递实参,则默认为 0
x = x || 0
y = y || 0
document.write(x + y)
}
// 调用
// getSum(1, 2)
getSum()
getSum(1, 2)
函数返回值
很多的函数具备返回值:prompt 、parseInt 。有的函数则没有返回值:alert 等。所以要根据需求,来设定需不需要返回值
代码:return 当函数需要返回数据出去时,用return关键字
// return 数据
// return 20
function getSum(x, y) {
return x + y
}
let num = getSum(10,30)
document.write(num)
细节:
-
在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
-
函数内部只能执行1次 return并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写
-
return会立即结束当前函数
-
函数可以没有 return,这种情况函数默认返回值为 undefined
函数作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的
可用性的代码范围
就是这 个名字的
作用域
。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

在JavaScript中,根据作用域的不同,变量可以分为:
变量的特殊情况:
如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当
全局变量
看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。
在不同作用域下,可能存在变量命名冲突的情况,到底改执行谁呢?
采取就近原则的方式来查找变量最终的值---------num结果为 123
function f1() {
let num = 123
function f2() {
console.log( num )
}
f2()
}
let num = 456
f1()
变量访问原则-作用域链
- 只要是代码,就至少有一个作用域
-
写在函数内部的局部作用域
-
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
-
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链
匿名函数
函数可以分别为:具名函数 和 匿名函数
具名函数 :
声明:function
fn
() {}
调用:fn()
匿名函数:
function() {}
匿名函数的使用
将匿名函数赋值给一个变量,并且通过变量名称进行调用 我们将这个称为函数表达式
let fn = function (){
//函数体
}
fn() //调用
其中函数的形参和实参使用跟具名函数一致
立即执行函数
场景介绍: 避免全局变量之间的污染
注意: 多个立即执行函数要用
;
隔开,要不然会报错
//方式1
(function () {console.log(11) }) ();
//方式2
(function () {console.log(11) }() );
//不需要调用 直接执行