函數(shù)的作用域:
函數(shù)的作用域的作用有:保護(hù)數(shù)據(jù)的安全( 全局的不安全 ),減少命名沖突
作用域分為三個作用域:全局作用域,局部作用域撤卢,塊級作用域
全局作用域的特點:全局變量可調(diào)用艳悔,到處都可以訪問
局部作用域的特點:局部變量,只能內(nèi)部調(diào)用讥电,形參屬于局部變量
塊級作用域的特點:塊級變量蹂窖,智能對應(yīng)的{}里面使用
作用域鏈:所有的作用域都是基于全局,開辟一層就會形成一條鏈允趟,變量的訪問以就近原則恼策,自己沒有的找上一級,
//?全局作用域(Script,?以前叫Global):?這里定義的變量叫全局變量:?特點是:?哪里都能用(公共的)
????????let?global?=?'全局變量'
????????//?到處可用:?到處可改(危險:?因此全局變量使用較少)
????????//?局部作用域(Local):?函數(shù)內(nèi)部區(qū)域,?函數(shù)內(nèi)部定義的變量叫局部變量:?特點是:?只能當(dāng)前函數(shù)內(nèi)部使用
????????//?形參:?屬于局部變量,?只能在函數(shù)內(nèi)部使用
????????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)???????????//?報錯
????????//?塊級的優(yōu)點:?減少了命名沖突
????????for?(let?i?=?0;?i?<?3;?i++)?{?}
????????for?(let?i?=?0;?i?<?5;?i++)?{?}
????????//?console.log(i)???????????????//?報錯
????????//?聲明變量一定要let關(guān)鍵字:?否則一律是全局變量
????????for?(i?=?0;?i?<?10;?i++)?{?}
????????console.log(i)
????</script>
匿名函數(shù):沒有名字潮剪,let 變量名=function(){},調(diào)用:變量名()
????<script>
????????//?匿名函數(shù):?函數(shù)表達(dá)式
????????//?函數(shù)沒有名字,?將函數(shù)的聲明賦值給變量保存
????????//?不要給匿名函數(shù)加名字:?沒有存在的意義(外部不能通過函數(shù)名調(diào)用)
????????let?fn?=?function?(a,?b)?{
????????????return?a?+?b
????????}
????????console.log(fn)
????????//?調(diào)用匿名函數(shù):?變量名(實參)
????????let?res?=?fn(1,?2)
????????console.log(res)
????</script>
立即執(zhí)行函數(shù)? ??(function(){}) 調(diào)用在后面添加() 函數(shù)之間用涣楷;隔開
<script>
????????//?立即執(zhí)行函數(shù):?自調(diào)用函數(shù)(自己調(diào)用自己)
????????//?解決:?全局變量污染的問題(?防止污染:?沙箱)
????????//?語法
????????//?(function(){})()
????????//?(function(){})?表示定義一個函數(shù)(匿名)
????????//?()?表示調(diào)用前面的函數(shù)
????????(function?()?{
????????????//?代碼寫到函數(shù)里面:?里面的變量是局部變量(安全也不影響外面)
????????????console.log(1)
????????????//?在里面定義變量:?安全
????????????let?dog?=?'哈士奇'
????????????console.log(dog)
????????})()
????????//?做別的功能
????????let?dog?=?'中華田園犬'
????????console.log(dog);
????????//?立即執(zhí)行函數(shù)前面必須有分號
????????(function?(a)?{
????????????console.log(2)
????????????console.log(a)
????????})('hello')
????</script>
對象
對象的使用
對象的增刪改查
增加? ? 對象.新屬性名=一個元素
刪除? ? delete 對象.屬性名
修改? 對象.原有的屬性名=新的元素
查找? ? ? 對象。屬性名? ? ? 對象【字符串屬性名】
例子:
<script>
??????//?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);
????</script>
對象遍歷
用for(let key(屬性名) in 對象)
????<script>
//聲明一個對象
??????let?goods?=?{
????????name:?"小米10?青春版",
????????num:?"100012816024",
????????weight:?"0.55kg",
????????address:?"中國大陸",
??????};
??????//利用for遍歷對象
??????for?(let?k?in?goods)?{
????//k是對象的屬性名
????????console.log(goods[k]);
??????}
????</script>
難點:在作用域這邊比較糾結(jié)抗碰,對象用法增刪改查這邊有可能與數(shù)組的增刪改查搞混狮斗。
做案例有點難度,不能一次性寫出來弧蝇,都練習(xí)便碳褒,復(fù)習(xí)預(yù)習(xí)相結(jié)合