电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解JavaScript作用域、作用域鏈和閉包的用法

瀏覽:104日期:2023-10-15 17:02:14

1. 作用域

作用域是指可訪問的變量和函數(shù)的集合。

作用域可分為全局作用域和局部作用域。

1.1 全局作用域

全局作用域是指最外層函數(shù)外面定義的變量和函數(shù)的集合。

換言之,這些最外層函數(shù)外面定義的變量和函數(shù)在任何地方都能訪問。

舉個(gè)例子:

// 最外層定義變量var a = 1;console.log(a); // 最外層可以訪問function fnOne() { // 最外層函數(shù) console.log(a); // 函數(shù)內(nèi)可以訪問 function fnTwo() { // 子函數(shù) console.log(a); // 子函數(shù)內(nèi)也可以訪問 }}// 說明在最外面定義一個(gè)變量,不僅在最外面可以訪問,在函數(shù)內(nèi)也能訪問,在函數(shù)的子函數(shù)內(nèi)也能訪問。

1.2 局部作用域

局部作用域是指在函數(shù)內(nèi)部定義的變量和函數(shù)的集合。

換言之,這些在函數(shù)內(nèi)部定義的變量和函數(shù),在函數(shù)外面是無法訪問的,只能在函數(shù)內(nèi)部(包括函數(shù)的子孫函數(shù))訪問。

舉個(gè)例子:

function fnThree() { // 在函數(shù)內(nèi)定義變量 var b = 2; console.log(b); // 函數(shù)內(nèi)部可以訪問 function fnFour() { console.log(b); // 子函數(shù)內(nèi)也能訪問 }}// 函數(shù)外不能訪問//console.log(b); // 說明在函數(shù) fnThree 中定義一個(gè)變量 b ,在函數(shù)內(nèi)可以訪問,在子函數(shù) fnFour 中也能訪問,但在 函數(shù) fnThree 外是不能訪問的。

2. 作用域鏈

從上面的兩個(gè)例子可以看出,最里層的子函數(shù)不僅可以訪問最外層函數(shù)內(nèi)的變量,還能訪問最外層函數(shù)外的全局變量。

這是因?yàn)?,在?chuàng)建最外層函數(shù)的時(shí)候,會(huì)把全局作用域拿過來,然后在創(chuàng)建子函數(shù)時(shí)候,又會(huì)把最外層的作用域(包括全局作用域)拿過來,就這樣一環(huán)扣一環(huán),就形成了作用域鏈。

所以,作用域鏈?zhǔn)侵竷?nèi)層函數(shù)擁有外層函數(shù)到最外層(最外層函數(shù)外,全局)的所有作用域列表。

3. 閉包

閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。(——百度百科)

從上面的第二個(gè)例子可知,函數(shù)外是不能訪問函數(shù)內(nèi)部定義的局部變量,但是閉包提供了可能。

舉個(gè)例子:

function User() {// 定義私有變量var userName = 'default';// 提供 setUserName() 方法function setUserName(uName) {userName = uName;}// 提供 getUserName() 方法function getUserName() {return userName;}// 將方法對(duì)外開放return {set: setUserName,get: getUserName}}var user1 = User();user1.set(’tom’);console.log(user1.get());var user2 = User();user2.set(’jack’);console.log(user2.get());// 說明User 函數(shù)內(nèi)部定義變量 uesrName ,并在內(nèi)部定義兩個(gè)子函數(shù)操作 userName,最后將兩個(gè)子函數(shù)返回(一個(gè)可直接放回,多個(gè)可放到對(duì)象中返回。)。這樣,在函數(shù)外面可以調(diào)用子函數(shù)訪問函數(shù)內(nèi)部的變量,這兩個(gè)子函數(shù)便實(shí)現(xiàn)了閉包的功能。

以上就是詳解JavaScript作用域、作用域鏈和閉包的用法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript作用域、作用域鏈和閉包的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 广东教师资格网-广东教师资格证考试网 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 电机保护器-电动机综合保护器-上海硕吉电器有限公司 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 方源木业官网-四川木门-全国木门专业品牌 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 黄石妇科医院_黄石东方女子医院_黄石东方妇产医院怎么样 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 |