javaScript函数及变量提升
概念:函数是具有包裹性的最小的功能模块
作用:程序员:提高代码的复用性
业务的角度:协同开发,便于维护
函数的定义:一个功能的创造
function 标识符(参数列表)//函数头部 {
函数体
}
function:告知编译器后面的标识符是一个函数名
标识符:代表函数名,必须满足标识符命名规则
函数的两种声明方式
1,利用函数关键字自定义函数(命名函数)
1 | function fun() { |
2,函数表达式(匿名函数)
1 | var 变量名 = function(){ }; |
a,函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数
b,函数表达式也可以进行传递
1 | 参数列表:无参 |
函数的调用:功能模块的使用
调用的语法:
1 | 无参:函数名(); |
1 | 有参:函数名(参数1...参数n); |
在定义函数时,函数名后面括号中的变量称为形式参数(简称形参)
再调用一个函数时,函数后面括号中的参数称为“实际参数”(简称实参)
传参方式:
1.内置类型传递:
值传递,数值的传递,单向传递,只能将实参的值传递给形参,反之不行
传参的注意事项:形参和实参是不同的内存单元,形参只有函数被调用时才会开辟空间,再调用结束后空间销毁
2.引用类型传递:
双向传递,可以通过形参改变实参的数值
return的作用1:
函数的返回值: 如果我们希望函数在调用完后, 可以得到一个数值, 这个只就是函数的返回值
返回值通过return 关键字带回
函数有return才有返回值的概念,没有return就没有返回值
1 | function max(a, b) { |
return的作用2:
只要函数遇到return,就把后面的结果返回给函数的调用者 函数名() = return后面的结果
遇到return返回数据且跳出函数
【注意】:封装时考虑该函数是否需要参数和返回值。
函数设计的思想: 强调用户无法操作函数体,只能调用函数
1.函数的功能
2.该函数是否需要参数
3.该函数是否需要返回值
事件与函数之间的关系:
onclick = 函数对象
至于必须写成 onclick=函数名,是语法缺陷,不要理解为是函数调用
事件:用户的某种行为操作,鼠标事件,键盘事件
事件的本质其实就是函数调用
事件与函数进行绑定
a,通过HTML元素进行绑定
1 | function fun() { |
b,通过js的方式绑定事件
将HTML元素转换成JS对象形式,给HTML标签起一个id名
1,查找到页面的那个元素
var oBtn = document.getElementById(“btn”); 先存储到oBtn变量中,
2,通过js的方式添加事件
JS对象操作属性的方式:js对象.属性
1 | oBtn.onclick = function() { |
普通函数与构造函数的区别:
1.返回值类型的区别:
构造函数没有返回值
普通函数有返回值
2.函数名的区别:
构造函数的函数名必须与类名一致,习惯首字母大写
普通函数的函数名只要符合标识符命名规则即可
3.调用方式的区别:
构造函数实在创建对象的时候由new关键字调用
普通函数是由我们使用对象调用的,一个对象可以调用多次普通函数
4.作用上的区别:
构造函数用于初始化一个对象
普通函数用于描述一类事物的公共行为
声明提升
变量提升:未被声明的变量 ,编译器会在首次进行变量定义且赋值为undefined
变量提升是当栈内存作用域形成时,js代码执行前,浏览器会将带有var,function关键字的变量提前进行声明declare(值默认就是 undefined),定义 defined(就是赋值操作),这种预先处理的机制就叫做变量提升机制也叫预定义
变量声明提升:只有var声明的变量才有声明提升,let,const没有;变量赋值无提升
函数声明提升:即将函数声明提升(整体)到作用域顶部(不包括函数表达式)
函数提升的优先级高于变量提升;
变量的作用域:变量能够使用的作用域
全局变量:没有被任何括号括起来的变量,作用域为整个文件
注意事项:
1,生命周期长,和页面生命周期一样
2,建议函数体内少使用全局变量,会降低函数的独立性
1 | var a = 123; |
局部变量:被任何括号括起来的变量,作用域为函数体内
1 | function fun(a) { |
函数嵌套定义:
子函数可以使用父函数的局部变量,反之父函数却不能使用子函数的局部变量
1 | function f1(a) { |
严格模式:
“user strict”;
在该作用域下的所有变量必须定义才能使用
1 | var a; |
回调函数:一个被当作函数参数的函数
1 | function f1(f) { 第三方函数,无法操作函数体的 |