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

您的位置:首頁技術文章
文章詳情頁

JavaScript中的預解析你了解嗎

瀏覽:154日期:2022-06-09 18:30:54

JS的預解析是指在代碼執行之前,JavaScript引擎會先對代碼進行一次掃描,將變量聲明和函數聲明提升到當前作用域的頂部,以便在代碼執行時能夠正確地訪問這些變量和函數。這個過程也被稱為“提升”。

具體來說,在預解析過程中,JavaScript引擎會將函數聲明和變量聲明提升到當前作用域的頂部,而不管它們實際上在代碼中的位置。這意味著,無論變量和函數聲明出現在代碼的哪個位置,它們在代碼執行之前就已經被處理了,可以在代碼中任何位置被訪問。

需要注意的是,只有函數聲明和變量聲明才會被提升,而不是變量的賦值操作。如果變量聲明和賦值操作同時出現在同一行代碼中,只有變量聲明會被提升到作用域頂部,而變量的值仍然會在代碼執行時賦值。

預解析在JavaScript中的具體表現有以下幾點:

1.函數聲明提升

在預解析階段,JavaScript引擎會將函數聲明(而非函數表達式)提升到作用域頂部。這意味著,在代碼中函數聲明可以出現在函數調用之后,甚至可以出現在函數內部,但仍然可以被正確識別和調用。注意,函數聲明既提升也定義

例如,下面的代碼中,函數foo()在預解析階段被提升到了作用域頂部,因此可以在函數bar()內部被正確調用:

bar(); // hello

function bar() {
  foo(); // 可以調用函數 foo()
  
  function foo() {
    console.log("hello");
  }
}

2.變量聲明提升

在預解析階段,JavaScript引擎也會將變量聲明提升到作用域頂部,但是不會提升變量的賦值操作。這意味著,變量可以在聲明之前被使用,但是如果在聲明之前進行賦值操作,會得到undefined。

例如,下面的代碼中,變量x在聲明之前被使用,但是在聲明之前進行賦值操作會得到undefined:

console.log(x); // undefined

var x = 10;

3.函數表達式不提升

在預解析階段,JavaScript引擎不會將函數表達式提升到作用域頂部,只會提升變量聲明。因此,在使用函數表達式定義的函數之前,必須先定義變量。

例如,下面的代碼中,函數foo()是通過函數表達式定義的,因此必須先定義變量foo才能調用該函數:

foo(); // Uncaught TypeError: foo is not a function
var foo = function() {
  console.log("hello");
};

JS的預解析還有一些需要注意的細節,包括以下幾點:

1.函數聲明和變量聲明的作用域

在預解析階段,函數聲明和變量聲明的作用域是整個函數或全局作用域。這意味著,在函數內部聲明的函數和變量可以在整個函數內部被訪問,而在全局作用域聲明的函數和變量可以在整個腳本中被訪問。

2.函數聲明和變量聲明的優先級

在預解析階段,函數聲明的優先級高于變量聲明。這意味著,如果同名函數和變量同時聲明,函數聲明會覆蓋變量聲明。

例如,下面的代碼中,變量x和函數x()同名,但是在預解析階段,函數x()會覆蓋變量x

console.log(x); // function x() {...}

var x = 10;

function x() {
  console.log("hello");
}

3.非全局作用域的預解析

在非全局作用域(如函數作用域)中,預解析只會發生在該作用域內。這意味著,在函數內部聲明的函數和變量只會被提升到該函數作用域的頂部,而不會影響到其他函數或全局作用域。

例如,下面的代碼中,函數bar()內部的變量x只會在函數作用域內被提升到作用域頂部,而不會影響到全局作用域或其他函數的作用域:

function foo() {
  bar();

  function bar() {
    console.log(x); // undefined
    var x = 10;
  }
}

foo();

總的來說,預解析是JavaScript中的一個重要概念,可以幫助我們更好地理解變量和函數的作用域和生命周期。了解預解析的規則和特點,可以幫助我們編寫更加規范和可讀性更好的JavaScript代碼。

當然,現在用了let、const和函數式表達式等,可以避免因為變量提升等帶來的小麻煩。

到此這篇關于JavaScript中的預解析你了解嗎的文章就介紹到這了,更多相關JavaScript預解析內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
主站蜘蛛池模板: 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 打包箱房_集成房屋-山东佳一集成房屋有限公司| 陕西华春网络科技股份有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 南京交通事故律师-专打交通事故的南京律师 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 |