函数是什么
- 函数是一种特殊的数据类型
- 函数是执行特定任务的语句的集合。
创建函数的方法
- 在创建函数的的时候,无论使用哪种方法,都需要使用function关键词。
函数声明
function fnName(参数1,参数2,参数3,......参数N){
//语句的集合
}
函数表达式
整个函数声明的过程由以下几部分构成:
- 1.funcion: 是一个声明函数的关键词
- 2.fnName: 函数名称。声明函数会创建一个变量,函数名称就是变量的名称,这个理解函数的关键。函数名称用来存放代码块(相当于变量的值)
- 3.小括号:用于存储函数的参数。所有的参数都是为了计算函数的返回值而生。参数分为两类:
- 形参:形参就是形式上的参数。形参是函数体内创建的变量。形参用于接收入到函数体内的实参。形参的数量可以是任意个,多个形参之间用逗号分隔。形参出现在函数申明中,实参出现在调用函数中。
- 大括号:用于定义函数体。函数体内包裹的是多条要执行的语句。函数体相当于变量的值。
- 4.函数体 :使用大括号包裹的代码块。函数体相当于函数名的值。
- 5.return语句:如果你希望函数运行之后计算一个值,需要在函数内使用return语句显示设置返回值。return语句不是必须设置的,如果你没有在函数体内设置return语句,那么函数默认的返回值是undefiend。注意:一个函数只能有一个返回值,如果你需要返回多个值,可以考虑将多个值放入一个数组里,以数组元素的形式返回。
函数表达式
- 特点1:函数只定义一次,可被调用任意次。
- 特点2:定义的函数永远不会执行,除非你调用它。
函数调用:
直接调用
事件调用
方法调用
作为参数调用
自调用
作用域分类
全局作用域:局部作用域之外的区域就是全局作用域。
局部作用域:Unfortunately,局部作用域用两种定义方式:
- 函数作用域:使用var关键词定义的变量就会创建函数作用域。
- 块级作用域:使用let和const关键词定义的变量就会创建块级作用域。
示例: 声明一个求平方的函数
function square(a){
return a * a
}
示例: 声明一个判断一个字符串是否是包含数字的函数
function square(a){
return a * a
}
函数表达式
调用函数
- 当创建了一个函数之后,如果你需要使用这个函数,你必须要去调用它,函数如果不调用,函数永远不会自己执行。调用函数的方法很简单,值需要在函数名之后加一对小括号就可以了。在调用函数时,小括号用于传递实参。
语法
funtionName( 实参1,实参2,实参3,...,实参N )
- 实参: 是调用函数时,通过形参传入到函数内的实际的参数。所有的实参都是为了计算函数返回值而出现的。
示例: 调用square()函数
square(10) // 100
变量作用域
定义:
- 变量作用域指变量发生作用的 (可以访问到) 区域。
- 发生作用的区域是指定义变量的区域。变量在哪个区域定义,变量
就在哪个区域起作用。在这个区域之内,可以访问到变量,在这个区域之外,访问不到变量。
有两种类型的作用域:
- 全局作用域:局部作用域之外的区域就是全局作用域。
- 局部作用域:局部作用域指函数作用域和块级作用域。这两种局部作用域使用不同的关键词定义:
- 函数作用域:指在函数体内,使用关键词var定义的变量,会创建变量的函数作用域,也就是说变量只能在当前函数体内才可以访问。注:变量定义在if或for创建的代码块内,是不会创建函数作用域的。
- 块级作用域: 指在大括号包裹的区域内,使用关键词let或const定义的变量,会创建块级作用域,只能在大括号内才可以访问。
变量提升
使用var或n声明的变量会被提升到作用域顶部。
示例1: 函数作用域
function fn(){
var a = 100
console.log(a) // 100 (在函数体内可访问到变量的值)
}
console.log(a) // Uncaught ReferenceError: a is not defined(在函数体外访问不到变量的值)
示例2: let定义的变量存在块级作用域
{
let a = 100
console.log(a) // 100
}
console.log(a) // Uncaught ReferenceError: a is not defined
示例3: let定义的变量存在块级作用域(if语句)
if(true){
let a = 100
console.log(a) // 100
}
console.log(a) // Uncaught ReferenceError: a is not defined
示例4: let定义的变量存在块级作用域(for语句)
for (let i = 0; i < 3; i++) {
console.log(i) // 0, 1, 2
}
console.log(i) // Uncaught ReferenceError: i is not defined
示例5: var定义的变量不存在块级作用域
{
var a = 100
console.log(a) // 100
}
console.log(a) // 100
示例6: var定义的变量不存在块级作用域
if(true){
var a = 100
console.log(a) // 100
}
console.log(a) // 100
示例7: var定义的变量不存在块级作用域
for (var i = 0; i < 3; i++) {
console.log(i) // 0, 1, 2
}
console.log(i) // 3
示例
console.log(a) //
var a = 1
示例
{
let a = 1
}
console.log(a) //
mouseover:当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡过程。对应的移除事件是mouseout
mouseenter:当鼠标移除元素本身(不包含元素的子元素)会触发事件,也就是不会冒泡,对应的移除事件是mouseleave
单词
get: 得到。got: 过去式表示已经得到。
- I got it: 我得到它了。(我听懂了)
compute: 动词。表示计算
computde: 动词。表示计算过的
comouter: 名词。表示风格、样式
getComputdestyle:
定义
window.getComputdestyle
返回一个对象。该对象 包含元素的计算后的样式。
什么是计算后的样式?
封装一个move()功能函数
主要要点:
1.window.setInterval(fn.间隔时间)
- 定义 语法(参数含义)
clearInterval
clearInterval()
函数是在JavaScript中用于取消setInterval()函数设定的定时执行操作
操作符
自增操作符:前置自增 || 后置自增
a++ => a = a+1
++a => a = a+1
- 第一个是先赋值再自加
- 第二个是先自加在赋值