掌握函数的基本使用,让代码具备复用的能力(重复使用,减少代码书写量,减少冗余)
理解封装的意义,能够具备封装函数的能力
函数:function,是被设计为执行特定任务的代码块
函数可以把具有相同或相识逻辑的代码"包裹"起来,通过函数调用去执行这些"包裹"的代码逻辑,这么做的优势是有利于精简代码方便复用、
函数的使用:
函数得声明语法:
function 函数名(){
函数体
}
函数命名规范:
和函数命名规范基本一致
尽量小驼峰式命名法
前缀应该为动词
常用动词约定:
can 判断是否可执行某个动作
has 判断是否含义某个词
is 判断是否为某个值
get 获取某个值
set 设置某个值
load 加载某些数据
函数的复用代码和循环重复代码有什么不同?
循环代码写完立即执行,不能很方便控制执行位置
函数能随时调用,随时执行,可重复调用,方便控制执行位置
函数传参:!!!
有参数的函数声明和调用:
function 函数名(参数列表){ 参数列表:
函数体 传入数据列表
} 声明这个函数需要传几个数据
多个数据用逗号隔开
有参数的调用
函数名(传递的参数列表)
形参: 声明函数时写在函数右边小括号里面的叫形参(形式上的参数,假的参数,不是真实的)
实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数,真实的参数,真正起作用的参数)
形参可以理解为这个函数内声明的变量,实参可以理解为给这个变量赋值
开发中尽量保持形参和实参个数一致
我们曾经使用过的alert('打印'),parseInt('11'),number('11')本质上都是函数调用的传参
用return返回数据
return注意事项:
在函数体中使用return关键字能将内部的执行结果交给函数外部使用
函数内部只能出现一次return,并且return后面的代码不会再被执行,所以return 后面的数据不能换行写!!!
return会立即结束当前的函数
函数可以没有return,这种情况函数默认返回值为undefined
作用域:
作用域:
通常来说,一段程序代码中所用的名字并不是总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用于的使用提高了程序的局部性,增强了程序的可靠性,减少名字冲突。
全局作用域:作用于所有的代码执行的环境(整个script标签内部)或者一个独立的js文件
局部作用域:作用于函数内的代码环境,就是局部作用域。因为和函数有关系,所以也叫作函数作用域!
块级作用域:块级作用域由{ }包括,if语句和for语句里面的{}等都是块级作用域
变量作用域:
全局变量:全局变量在任何区域都可以访问和修改
局部变量:局部变量只能在当前的函数内部访问和修改
块级变量:l只能在块级作用域里访问,不能跨块访问,也不能跨函数访问
变量的两种特殊情况:
如果函数内部(局部变量)或者块级作用域内部,变量没有声明,直接赋值,当作全局变量来看,但是强烈不推荐!!!
还有一种情况,函数内部的形参可以看做局部变量
在不同作用域下,可能存在变量命名冲突的情况,到底执行谁呢?
变量访问原则--作用域链:
只要是代码,就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链
内部函数访问数据机制,就近原则,先在里面找这个数据,如果找不到在一层一层的往外面找这个数据,如果找到最外层还是找不到的话,就是not a defined报错,就像一条链一样,有里往外查询数据!!!
匿名函数:
具名函数(具有名字的函数)
匿名函数(没有名字的函数)
将匿名函数赋值给一个变量,并且通过变量名进行调用,我们将这个称为函数表达式
立即执行函数: (不需要调用,立即执行)
立即执行函数也是匿名函数的一种
场景介绍:避免全局变量之间的污染
语法:
(function (){console.log(11)})();
(function (){console.log(11)}())
立即执行函数 第一个小括号放的是 形参 ; 第二个小括号放的是实参
立即执行函数函数加不加名字,无影响。可以加上函数名,不过还是立即执行函数。
多个立即执行函数在同一作用域内,必须使用;隔离开!!!