function test1(){
console.log("lol")
}
function test2(){
console.log("apex")
}
test1()//调用函数阶段;选择了test1所以结果为lol
var test3=function(){
console.log("csgo")
}
var test4=function(){
console.log("g7人")
}
test3()//结果为csgo
两种方法都可调用多次函数
定义和调用函数的时候里面的()是用来放参数的位置,参数分为行式参数和实际参数。
function test(a,b){//行参
var 套餐一=a===1?"米饭":"土豆丝"//可选择
var 套餐二=b===2?"馒头":"脆皮鸭"
var 套餐三="盖浇面"//规定好的套餐
console.log(套餐一,套餐二,套餐三)
}
test(1,3)//实参
可以传参,可以不传参
形参只能在函数内部使用
内部定义只有内部才能访问
console.error("请输入参数")//报错
// 比如 1 + 2 是一个表达式,那么 这个表达式的结果就是 3
console.log(1 + 2) // 3
function fn() {
// 执行代码
}
// fn() 也是一个表达式,这个表达式就没有结果出现
console.log(fn()) // undefined
function fn() {
// 执行代码
return 100
}
// 此时,fn() 这个表达式执行完毕之后就有结果出现了
console.log(fn()) // 结果为100
我们可以在函数内部使用return关键把任何内容当作这个函数运行后的结果
function fn() {
console.log(1)
console.log(2)
console.log(3)
// 写了 return 以后,后面的 4 和 5 就不会继续执行了
return
console.log(4)
console.log(5)
}
// 函数调用
fn()
fn()
console.log(num)
function fn() {
console.log('我是 fn 函数')
}
var num = 100
预解析之后
var num=100
function fn() {
console.log('我是 fn 函数')
}
fn()
console.log(num
赋值式函数会按照 var 关键字的规则进行预解析
// 下面两个变量都是存在在全局作用域下面的,都是可以在任意地方使用的
var num = 100
var num2 = 200
// 这个 num 是一个全局作用域下的变量 在任何地方都可以使用
var num = 100
function fn() {
// 下面这个变量就是一个 fn 局部作用域内部的变量
// 只能在 fn 函数内部使用
var num2 = 200
}
fn()
首先,在自己的作用域内部查找,如果有,就直接拿来使用
如果没有,就去上一级作用域查找,如果有,就拿来使用
如果没有,就继续去上一级作用域查找,依次类推
如果一直到全局作用域都没有这个变量,那么就会直接报错(该变量 is not defined)
var num = 100
function fn() {
var num2 = 200
function fun() {
var num3 = 300
console.log(num3) // 自己作用域内有,拿过来用
console.log(num2) // 自己作用域内没有,就去上一级,就是 fn 的作用域里面找,发现有,拿过来用
console.log(num) // 自己这没有,去上一级 fn 那里也没有,再上一级到全局作用域,发现有,直接用
console.log(a) // 自己没有,一级一级找上去到全局都没有,就会报错
}
fun()
}
fn()
控制台结果为
300
200
100
is not defined
function fn() {
var num = 100
}
fn()
console.log(num) // 发现自己作用域没有,自己就是全局作用域,没有再上一级了,直接报错
先在自己作用域内部查找,有就直接赋值
没有就去上一级作用域内部查找,有就直接赋值
还没有再去上一级作用域查找,有就直接赋值
如果一直找到全局作用域都没有,那么就把这个变量定义为全局变量,再给他赋值
//无法找到上一级变量
function fn() {
num = 100
}
fn()
// fn 调用以后,要给 num 赋值
// 查看自己的作用域内部没有 num 变量
// 就会向上一级查找
// 上一级就是全局作用域,发现依旧没有
// 那么就会把 num 定义为全局的变量,并为其赋值
// 所以 fn() 以后,全局就有了一个变量叫做 num 并且值是 100
console.log(num) // 100
例子:
var num=100
function test1(){
var num=200
function child1(){
//var num=300
num=400//num=300被注释后在当前作用域找不到num赋值,向上一级进行赋值
console.log(num)
}
console.log("修改前",num)//调用之前num为200
child1()
console.log("修改后",num)//调用之后num赋值为400
}
test1()
var obj = {
num: 100,
str: 'hello world',
boo: true
}
// 创建一个空对象
var obj = {}
// 像对象中添加成员
obj.name = 'Jack'
obj.age = 18
// 创建一个空对象
var obj = new Object()
// 向对象中添加成员
obj.name = 'Rose'
obj.age = 20
Object 是 js 内置给我们的构造函数,用于创建一个对象使用的
分为 栈 和 堆
栈: 主要存储基本数据类型的内容
堆:主要存储复杂数据类型的内容
复杂数据存储
var obj = {
name: 'Jack',
age: 18,
gender: '男'
}
var num = 1
var str = '1'
console.log(num == str) // true
var obj = { name: 'Jack' }
var obj2 = { name: 'Jack' }
console.log(obj == obj2) // false
就是数据的集合,也就是我们把一些数据放在一个盒子里面,按照顺序排好。
[1, 2, 3, 'hello', true, false]
有两大类:基本数据类型和复杂数据类型
直接使用 [] 的方式创建一个数组
// 创建一个空数组
var arr1 = []
// 创建一个有内容的数组
var arr2 = [1, 2, 3]
// 创建一个空数组
var arr1 = new Array()
// 创建一个长度为 10 的数组
var arr2 = new Array(10)
// 创建一个有内容的数组
var arr3 = new Array(1, 2, 3)
length 就是表示数组的长度,数组里面有多少个成员,length 就是多少
// 创建一个数组
var arr = [1, 2, 3]
console.log(arr.length) // 3
// 创建一个数组
var arr = ['hello', 'world']
var arr = ['hello', 'world']
console.log(arr[0]) // hello
console.log(arr[1]) // world
排序,就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组