三 燃逻、JS 作用域
1.全局作用域:
(一)在任意位置都可訪問的范圍
(二)在全局范圍定義的變量其本質(zhì)都是掛載到了window對象下
(三)全局范圍的this指的就是window
(四)在函數(shù)外部定義的變量全局變量
例如: var count=10;
function Fn() {
console.log("函數(shù)內(nèi)部:"+count);
var sub=function () {
console.log("sub函數(shù)內(nèi)部:"+count);
}
sub()
}
Fn()
console.log("函數(shù)外部:"+count);
2.局部作用域:
(一)在函數(shù)內(nèi)部定義的變量即為局部變量
(二)特點:
第一.函數(shù)內(nèi)部定義變量(即局部變量)外部訪問不到
第二.在當(dāng)前函數(shù)內(nèi)部及內(nèi)部的子函數(shù)可以訪問
注:
1.var和let的區(qū)別
1.是否有變量提升
2.看能否重復(fù)定義
3.看是否有塊級作用域
塊級作用域使用場景:函數(shù)代碼塊,for循環(huán)面粮,If語句
2.普通函數(shù)和實例化函數(shù)(即 new 函數(shù)名())調(diào)用的區(qū)別嚣州?途事?后室?憋飞?
相同點:.普通函數(shù)和實例化函數(shù)都會執(zhí)行函數(shù)內(nèi)部的代碼
區(qū)別:
1.普通函數(shù)的this指的是window他炊,而實例化的函數(shù)中的this指的當(dāng)前實例化對象本身
2.普通函數(shù)不加return默認返回undefined,而實例化函數(shù)不加return也能返回争剿,返回當(dāng)前實例化的對象
3.實例化函數(shù)的執(zhí)行機制:
第一步:創(chuàng)建一個對象
第二步:把構(gòu)造函數(shù)的作用域賦給這個對象
第三步:執(zhí)行構(gòu)造函數(shù)中的代碼
第四步:自動返回這個對象
3.塊級作用域:(ES6才有)
- call,apply和bind:
相同點:主要用于改變this指向
區(qū)別:
第一:call和applly直接調(diào)用函數(shù),而bind只是返回一個函數(shù)的引用
第二:call和applly的區(qū)別主要在傳參數(shù)上不同
//call傳參數(shù)是用逗號分隔傳參
例如:obj.setName.call(obj2,'李四',19,'河南')
//apply傳參用數(shù)組形式傳參
例如:obj.setName.apply(obj2,['李四',19,'河南'])
//bind傳參
例如:
obj.setName.bind(obj2,'李四',19,'河南')( )
或
obj.setName.bind(obj2)('李四',19,'河南')
四 痊末、JS 原型鏈
一蚕苇、JS面向?qū)ο蠡谠?/p>
json字符串和js對象互轉(zhuǎn)
json字符串->json對象 JSON.parse();
例如:JSON.stringify(json)
json對象->json字符串 JSON.stringify()
例如:JSON.parse(localStorage.getItem('goods'))
localStorage.removeItem('goods')
localStorage.setItem('goods')
localStorage.getItem('goods')
localStorage.cleawr()
localStorage需要手動清除
sessionStorage:一關(guān)閉瀏覽器清除了
sessionStorage.removeItem('goods')
sessionStorage.setItem('goods')
sessiontorage.getItem('goods')
sessionStorage.cleawr()