函数定义
函数也是一个对象。
函数就是可以重复执行的代码块
函数就是完成特定功能的一段代码
使用typeof检查一个函数对象时,会返回function
函数function的作用
因为一部分代码使用次数可能会很多,所以封装起来,需要的时候调用就可以了
(1)它可以将复杂的事情简单化
(2)将重复使用的代码进行统一封装
特点
封装到函数中的代码不会立即执行
函数中的代码会在函数调用的时候执行
调用函数语法:函数对象()
调用函数时,函数中封装代码会按照顺序执行
函数的使用
不常用
var fun=new Function(“console.log(“大家好!”);”);
常用
函数定义
函数调用
函数常见声明方式
(1)函数声明方式
function sum(a,b){
console.log(a+b);

sum(20,30);
(2)函数表达式声明方式
var sum=function(a,b){
console.log(a+b);
};
sum(20,30)
(3)使用Function构造函数
var add=new Function(“num1”,“num2”,“return num1+num2”);
不推荐使用,主要用于面向对象时理解“函数就是对象,函数名就是指针”这一概念
函数的参数
形参
形式上参与运算的变量,无实际值,为实参占位置,就像一个躯壳一样
function f(a,b){}//a,b是形参,占位置,函数定义时形参无值
实参
实际参与运算的变量,形参为它占位置,真实参与运算的变量
f(x,y);//x,y是实参,有具体的值,会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,无法修改外部的x,y
函数使用注意
(1)在调用函数时,可以在()中指定实参,实参将会赋值给函数中对应当然形参
(2)调用函数时解析器不会检查实参的类型,所以开发中一般需要对参数进行类型的检查
(3)函数的实参可以是任意的数据类型
(4)调用函数时,解析器不会检查实参的数量,多余实参不会被赋值,如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined
arguments对象
装入传递进来的实参
length属性
函数形参的个数
函数返回值(return)
当一个函数被调用,通常会从函数的开始执行到结束,如果想提前结束该函数的执行可以使用return语句,return语句后面的所有语句将永远不会执行。
一般return用于返回结果。
注意:
1、如果函数没有显式的使用return语句,那么函数有默认的返回值:undefined
2、如果函数使用return语句,那么跟在return后面的值,就成了函数的返回值
3、如果函数使用return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
4、推荐的做法是要么让函数始终都返回一个值,要么不要有返回值
函数直接声明和函数表达式声明的区别
(1)函数声明必须有函数名,而函数表达式的函数名可以省略
(2)JS解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
匿名函数
没有命名的函数 function(){}
作用
1、用在绑定事件的时候
document.onclick=function(){
alert(1);

2、定时器
setInterval(function(){
console.log(“每秒爱你一遍!”);
},1000);
3、立即执行函数
js的函数
函数是一种数据类型
console.log(typeof fn);
console.log(typeof fn());
归根结底,它还是属于object
回调函数
回调函数就是一个通过函数调用的函数。
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
一般用于递归。
js的函数
变量的作用域
(1)作用域
变量可以起作用的范围
(2)全局变量
在任何地方都可以访问到的变量就是全局变量;对应全局作用域
(3)局部变量
只在固定的代码片段内可访问到的变量,最常见的例如函数内部;对应局部作用域(函数作用域)
局部变量,先在函数内部的作用域找变量name,如果找到则使用,如果找不到去父级作用域找name变量。
(4)注意
不使用var声明的变量是全局变量,不推荐使用
变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁
(5)块级作用域
任何一对花括号{}中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
在es5之前没有块级作用域的概念只有函数作用域。
(6)作用域链
概念
(1)只有函数可以制造作用域结构,那么只要是代码,就至少有一个作用域。即全局作用域
(2)凡是代码中有函数,那么这个函数就构成另一个作用域。
(3)如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
*其他语言中变量i只能在for循环内部访问(局部变量)*for(var i=0;i<10;i++){}
(7)预解析
概念
JS代码的执行是由浏览器中的js解析器来执行
JS解析器执行js代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程
1)把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值
2)把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用
3)先提升var,再提升function

(8)变量提升
1)变量提升
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升
2)函数提升
js解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

相关文章:

  • 2021-08-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2021-10-06
  • 2021-10-27
  • 2022-01-14
相关资源
相似解决方案