函数的作用域:
函数的作用域的作用有:保护数据的安全( 全局的不安全 ),减少命名冲突
作用域分为三个作用域:全局作用域,局部作用域,块级作用域
全局作用域的特点:全局变量可调用,到处都可以访问
局部作用域的特点:局部变量,只能内部调用,形参属于局部变量
块级作用域的特点:块级变量,智能对应的{}里面使用
作用域链:所有的作用域都是基于全局,开辟一层就会形成一条链,变量的访问以就近原则,自己没有的找上一级,
// 全局作用域(Script, 以前叫Global): 这里定义的变量叫全局变量: 特点是: 哪里都能用(公共的)
let global = '全局变量'
// 到处可用: 到处可改(危险: 因此全局变量使用较少)
// 局部作用域(Local): 函数内部区域, 函数内部定义的变量叫局部变量: 特点是: 只能当前函数内部使用
// 形参: 属于局部变量, 只能在函数内部使用
function fn() {
// 访问全局变量: 可以访问
console.log(global)
// 局部变量
let local = '局部变量'
console.log(local)
}
fn()
// 全局作用域访问局部变量
// console.log(local) // 报错
// 块级作用域(Block)
if (true) {
let block = '块级变量'
console.log(block)
}
// 全局作用域访问块级变量
// console.log(block) // 报错
// 块级的优点: 减少了命名冲突
for (let i = 0; i < 3; i++) { }
for (let i = 0; i < 5; i++) { }
// console.log(i) // 报错
// 声明变量一定要let关键字: 否则一律是全局变量
for (i = 0; i < 10; i++) { }
console.log(i)
匿名函数:没有名字,let 变量名=function(){},调用:变量名()
// 匿名函数: 函数表达式
// 函数没有名字, 将函数的声明赋值给变量保存
// 不要给匿名函数加名字: 没有存在的意义(外部不能通过函数名调用)
let fn = function (a, b) {
return a + b
}
console.log(fn)
// 调用匿名函数: 变量名(实参)
let res = fn(1, 2)
console.log(res)
立即执行函数 (function(){}) 调用在后面添加() 函数之间用;隔开
// 立即执行函数: 自调用函数(自己调用自己)
// 解决: 全局变量污染的问题( 防止污染: 沙箱)
// 语法
// (function(){})()
// (function(){}) 表示定义一个函数(匿名)
// () 表示调用前面的函数
(function () {
// 代码写到函数里面: 里面的变量是局部变量(安全也不影响外面)
console.log(1)
// 在里面定义变量: 安全
let dog = '哈士奇'
console.log(dog)
})()
// 做别的功能
let dog = '中华田园犬'
console.log(dog);
// 立即执行函数前面必须有分号
(function (a) {
console.log(2)
console.log(a)
})('hello')
对象
对象的使用
对象的增删改查
增加 对象.新属性名=一个元素
删除 delete 对象.属性名
修改 对象.原有的属性名=新的元素
查找 对象。属性名 对象【字符串属性名】
例子:
// delete是对象的专属 语法
let goods = {
name: "小米10 青春版",
num: "100012816024",
weight: "0.55kg",
address: "中国大陆",
};
console.log(goods);
// 1. 新增: 对象.新属性名 = 值 || 对象['新属性名'] = 值
goods.price = "1999元";
goods["max"] = "型号";
console.log(goods);
// 2. 修改: 对象.属性名 = 值 || 对象['属性名'] = 值
goods.max = "plus";
goods["num"] = "1231243";
console.log(goods);
// 3. 删除: delete 对象.属性名 || delete 对象['属性名']
delete goods.max;
console.log(goods);
对象遍历
用for(let key(属性名) in 对象)
//声明一个对象
let goods = {
name: "小米10 青春版",
num: "100012816024",
weight: "0.55kg",
address: "中国大陆",
};
//利用for遍历对象
for (let k in goods) {
//k是对象的属性名
console.log(goods[k]);
}
难点:在作用域这边比较纠结,对象用法增删改查这边有可能与数组的增删改查搞混。
做案例有点难度,不能一次性写出来,都练习便,复习预习相结合