融創聯手兩大行業巨頭 進軍十萬億元級康養市場

繼11月底宣布新增會議會展板塊后,融創中國在12月初又推出了康養品牌“融愛家”,並聯手清華醫療和日本美邸(MCS)養老服務兩大康養行業龍頭,開啟了醫療康養產業的全面布局。至此,融創中國形成了以地產為核心主業,涵蓋服務、文旅、文化、會議會展、醫療康養業務的六大戰略板塊。

對此,融創中國董事會主席孫宏斌表示:“融創投資文旅、文化、會議會展、醫療康養,都是和地產有關的消費升級,是地產+消費升級,是地產+美好生活,這是融創一貫的邏輯。六大板塊中有四個――地產、服務、文旅、會議會展,融創都做到了頭部企業。融創希望用3年到5年時間,在文化、醫療康養兩個板塊也能做到頭部。醫療康養產業是一個非常巨大的市場,但也是一個很難做的市場,融創有情懷、有決心,有耐心,在這個行業里提供中國最好的養老和醫療康養服務。”

攜手兩大行業龍頭

數據显示,截至2018年年底,我國60歲及以上老年人達2.5億,佔全國總人口的18%;到2040年,60歲以上老年人口將進一步佔到總人口的30%,老齡化趨勢持續加劇,國民醫養需求急劇增長。預計2020年中國健康服務業總規模將超過8萬億元,到2030年將達16萬億元。中國即將成為全球健康產業的最大市場,醫養產業快速發展是大勢所趨。

而為了在這一巨大市場中佔據高地,融創也是做足了準備。

融創中國執行總裁兼北京區域集團總裁荊宏表示,公司布局醫療康養產業在醫療專業、康養服務和規模布局三大方面具備核心競爭力。

對此, 廣發證券房地產行業首席分析師樂加棟也表示,此前融創與清華大學、青島市政府等合作成立了總建築面積42萬平方米的“清華大學附屬融創青島醫學中心”,而“融愛家”旗下“融創醫療康養項目社區醫院”是清華融創青島醫學中心附屬醫院的直轄醫院,通過項目巡診、綠色通道和雙向診斷,以高服務品質為客戶提供專業保障。在康養產業方面,公司與日本領先的康養機構美邸養老服務公司合作,針對中國家庭的健康養老需求提供高品質養老服務,與醫療產業相互依託,打造醫療康養一站式關愛體系。此外,融創前期已廣泛布局的文旅產業為公司醫療康養項目提供充足的備選項目和發展空間。目前融創已在山東、四川、雲南、浙江等地規劃醫療康養項目22個,其中14個已經投入建設,青島阿朵小鎮頤養社區計劃將於2020年5月份投入運營。

融創方面還表示,依託遍布全國的文旅和旅居項目,公司還可以為業主提供高標準候鳥式養老服務。醫養類項目往往對於周邊自然環境有較高要求,而融創日益蓬勃的文旅布局,既能滿足中國家庭對旅遊度假的多元需求,同時為醫療康養領域增添了新引擎。目前,融創文旅集團已是全球最大的文旅產業運營商、全球最大的文旅物業持有者,在全國布局了10座文旅城,4個旅遊度假區,24個文旅小鎮,其中涵蓋了41個主題樂園、26個商業及近100家高端酒店。各大板塊的相互賦能以及功能疊加,大大擴展了融創發展醫療康養的邊際效應。

圍繞“地產+”各板塊相互賦能

雖然康養市場需求巨大,未來將發展成一個十萬億元級的市場,但孫宏斌和融創的高管團隊也坦言,目前康養市場的商業模式尚不成熟,配套政策也還不完善,行業普遍虧損,融創在康養上的投入,還需要從地產業務上反哺。

不過,從當下融創的銷售表現來看,公司有充足實力完成對相應板塊的悉心培養。

11月份,融創中國實現合同銷售金額666.5億元,同比增長48%,合同銷售面積460.4萬平方米,同比增長49%,對應銷售均價14470元/平方米。自9月份以來,融創持續加大推盤銷售力度,連續三個月銷售規模超過600億元,11月份更是超過2017年12月份的641.6億元,創下公司歷史上單月銷售規模新高。截至11月份,融創2019全年銷售目標完成率達到91%,全年大概率可完成5500億元銷售目標。

實際上,此前融創在發布半年報時曾透露,截至8月22日公司確權土地儲備貨值為2.82萬億元,確權土地儲備面積為2.13億平方米,超過83%的土儲位於一線、二線城市。而這些土地的平均成本僅為4307元/平方米,對應上述銷售均價,利潤足夠客觀。

有業內人士也表示,目前融創的地產業務規模足以躋身第一梯隊,造血能力也較強,但隨着國內房地產行業步入成熟階段,龍頭企業想要繼續保持快速發展,未雨綢繆培養新的利潤增長點已成必然趨勢,恆大、碧桂園、萬科均是如此。孫宏斌近些年布局文化、康養等業務,就是為了融創未來5年甚至10年後的發展布局,讓公司真正成為中國家庭美好生活整合服務。而上述六大板塊正是融創基於對消費升級和美好生活的深刻洞察而進行的戰略選擇,圍繞“地產+”,各板塊相互賦能,逐步擴展邊際效應。

值得注意的是,除了現有的六大板塊,孫宏斌透露,未來公司很可能進軍教育產業。而此前的10月底,廣州華萬教育剛以2.67億元的底價競得廣州市花都區一宗教育教學用地。

而《證券日報》通過天眼查得知,天津融創文旅地產有限公司和融創房地產集團有限公司分別持有廣州華萬教育49%和51%的股權。這也意味着,孫宏斌在教育產業上似乎已經開始悄然布局。

(責編:許維娜、孫紅麗)

【其他文章推薦】

柚木地板是什麼,其材料規格及適合施作環境?

※裝潢省錢妙招,家具訂製推薦達人,教您省下不必要的裝潢

※門外漢也要知道的超耐磨木地板祕辛?

※住家安全首選「隱形鐵窗」,KO傳統老舊鐵窗!

※帶你選對好椅子,辦公椅工廠樣式齊全!

台中系統廚櫃各項材質報價一覽表

地球78個基於高山冰川的水系統被稱為高山「水塔」,其通過冰川、積雪、湖泊和河流來儲藏與運送水

地球78個基於高山冰川的水系統被稱為高山「水塔」,其通過冰川、積雪、湖泊和河流來儲藏與運送水,為全球19億人(約佔全球總人口的1/4)提供水資源。亞洲以印度河「水塔」受依賴度最高也最為脆弱,它由喜馬拉雅山脈的廣大地區組成,覆蓋阿富汗、中國、印度和巴基斯坦部分地區。

姚檀棟提醒說,如果全球氣溫升幅超過攝氏2度,亞洲「水塔」氣溫則會劇增至4度,到2060-2070年會出現更大規模的冰川退卻。冰川消減後,以季節性冰川融水補給為主的河流能夠提供的淡水量也會隨之減少,下游地區人口可能會面臨淡水資源減少的問題。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※何謂NBR手套,其特性及功能為何?

※選購空壓機需注意八大事項 !

※一條龍物流瞄準台中港倉儲,未來商機 !

※飲用桶裝水到底安不安全? 破解錯誤迷思!

新北市轉軸新北市探針選用參考標準?

廈門控股集團董事長陳志平表示,此次純電動集裝箱牽引車的投用

廈門控股集團董事長陳志平表示,此次純電動集裝箱牽引車的投用,是新一代綠色生態港口建設的一部分。接下來集團將通過構造清潔低碳的港口用能體系,建設智慧化的港口生產服務體系,推動港產城深度融合發展,以傳統碼頭全自動化改造為試點,最終實現廈門港的整體轉型升級,建設有國際競爭力的新一代綠色生態港口。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※幫你考照過關,堆高機裝卸操作教學影片大公開 !

※高效率洗滌塔活性碳設備,能去除多少有機溶劑?

※飲用桶裝水到底安不安全? 破解錯誤迷思!

※家庭、朋友聚會,享受輕鬆烤肉必備外燴烤爐NO.1

新北市探針業者,哪家可以精準車製?

※十大封口機人氣排行榜-烘焙必備幫手!

北海道立鄂霍次克流冰科學中心所長高橋修平率領的研究團隊

北海道立鄂霍次克流冰科學中心所長高橋修平率領的研究團隊,為研究全球暖化影響,在網走市等4個場所調查到2009年的15年內,觀測到的流冰量與平均氣溫間關係。研究團隊說,每年在日本北海道網走市等地能看到的流冰美景,受到地球暖化影響,到本世紀末時有可能消失。

調查結果顯示,1月到3月間的平均氣溫升高,流冰量就會減少;更進一步來說,只要這段期間斜裡町氣溫上升攝氏4.1度、網走市上升3.1度、紋別市上升2.5度、枝幸町上升2.1度,流冰就會消失。這4個城市都位於北海道北部靠鄂霍次克海沿岸。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

示波器探測執行效能最佳化的8大秘訣

※專業客製化禮物、贈品設計,辦公用品常見【L夾】搖身一變大受好評!!

冷熱飲水機桌上型飲水機辦公室飲水機直立式飲水機,選購技巧大公開!!

※哪一些是橡膠加工製品?又區分什麼用途

※如何知道自已的電腦cpu支不支持AVX指令集?

※票選推薦煮婦最愛手壓封口機,省荷包不犧牲品質

廈門建設綠色生態港口 啟用首批純電動牽引車

摘錄自2019年12月10日中新網廈門報導

「廈門港新一代綠色生態型港口建設暨示範項目啟動儀式」今(10)日在廈門港海潤碼頭舉行,首批5台純電動集裝箱牽引車交付使用,這是中國首批商用化的純電動牽引車,標誌著廈門港新一代綠色生態港口建設邁上新台階。

這批電動牽引車每部每年可節約能源17噸標煤,減少排放47.4噸二氧化碳,未來港務運輸超過300部車輛計算,每年節約標煤達到5,300噸、減排13,000噸二氧化碳,社會效益和經濟效益顯著。

廈門控股集團董事長陳志平表示,此次純電動集裝箱牽引車的投用,是新一代綠色生態港口建設的一部分。接下來集團將通過構造清潔低碳的港口用能體系,建設智慧化的港口生產服務體系,推動港產城深度融合發展,以傳統碼頭全自動化改造為試點,最終實現廈門港的整體轉型升級,建設有國際競爭力的新一代綠色生態港口。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

噴霧洗滌塔實際應用案例分享

※各種攤販小吃設備,沙威瑪機自動旋轉烤玉米機,側火烤爐應有盡有!

※想知道CNC 自動車床與CNC車床有何區別??

示波器鮮為人知的使用技巧?

※客製專屬滑鼠墊、可愛造型L夾L型資料夾、透明證件套、手提袋,專業印刷設計廠商!  

※使用真空封口機常見問題?

最新研究:全球「水塔」面臨多重威脅 喜馬拉雅列亞洲最脆弱

摘錄自2019年12月10日中新網北京報導

據中國科學院青藏高原研究所消息,括中國科學家在內的全球科學家對被稱為「水塔」—地球78個高山冰川水系統的最新研究評估顯示,全球「水塔」正面臨氣候變化、人口增長、水資源管理不善、其他地緣政治因素等多重威脅,形勢岌岌可危。

這項最新評估研究由全球32位科學家合作撰寫,獲得中科院院士、冰川學家姚檀棟牽頭的中科院專項資助,並發表於《自然》期刊。

地球78個基於高山冰川的水系統被稱為高山「水塔」,其通過冰川、積雪、湖泊和河流來儲藏與運送水,為全球19億人(約佔全球總人口的1/4)提供水資源。亞洲以印度河「水塔」受依賴度最高也最為脆弱,它由喜馬拉雅山脈的廣大地區組成,覆蓋阿富汗、中國、印度和巴基斯坦部分地區。

姚檀棟提醒說,如果全球氣溫升幅超過攝氏2度,亞洲「水塔」氣溫則會劇增至4度,到2060-2070年會出現更大規模的冰川退卻。冰川消減後,以季節性冰川融水補給為主的河流能夠提供的淡水量也會隨之減少,下游地區人口可能會面臨淡水資源減少的問題。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

飲水機設備有哪些?

※如何選購橡膠製品橡膠按鍵規格有哪些?該如何應用在商品上?  

AVX DistributorAVX TPSAVX鉭質電容器 規格有哪些?各別作用在於?

nbr乳膠手套可適用在什麼環境?

※空壓機何時可換油? 空壓機保養的正確觀念與維護 !

真空封口機該不該買?使用心得分享

霧霾影響 中國官方建議室內場所購置空氣清淨機

摘錄自2019年12月11日中央社報導

就在霧霾天氣席捲多地,55個城市啟動重污染天氣預警的當下,中國官方昨(10)天發布霧霾防護指南,建議學校、辦公室等室內場所配置空氣清淨機,以降低細懸浮微粒(PM2.5)濃度。

中國國家衛生健康委員會官網發布《空氣污染(霾)人群健康防護指南》,建議幼稚園、中小學校、辦公室、室內健身場所等室內場所,配置空氣淨化器(空氣清淨機),儘量降低PM2.5濃度;有條件時,可採用新風裝置(換氣系統)引入新鮮空氣,防止二氧化碳濃度過高。

綜合陸媒此前報導,相關議題已經爭論多年,由於空氣清淨機價格高昂又耗電,平均每間教室要配置兩台,因此在霧霾多發地區,僅有北京等首善地區有官方財政補貼,極少數學校統一配置,且多由家長捐贈。但因顧慮公平性,還有學校因此又移除空氣清淨機。

因此,北京青年報建議,有關方面應該根據國家衛健委的建議,就學校配置空氣清淨機推出專門的實施細則,明確哪些城市學校應該配置,因為各個城市每年的霧霾天數、嚴重程度不一樣。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道台中食品倉有哪些?  

堆高機基本駕駛指導教學(影片)

廢氣洗滌塔,叫得動, 找得到的專業廠商‎

營業用紅外線烤爐比價站,怕你買貴,幫你找好康~

※市面十大品牌封口機!該如何選購?

塑膠射出成型加工商品有哪些?

中國生態環境部:黃河過度開發污染嚴重 政府擬加強治理

摘錄自2019年12月11日中央社報導

據報,中國生態環境部黃河流域生態環境監督管理局副局長連煜接受新京報採訪時指出,黃河存在水資源過度開發、河湖污染等生態問題。黃河水資源開發使用率達80%以上,枯水期更可達85%以上,遠超過一般河流開發利用的警戒水準。

連煜認為,黃河污染因素除過度用水外,還有流域沿途多分布煤炭、石油開採、煤化工及金屬冶煉等產業。這些產業都是高耗水、重污染和高度仰賴能源資源,加上工業技術水準低、從事企業規模小且污染治理能力差,使情況更惡化。

此外,最近30年黃河流域魚類族群已減少約一半,其中原生種及瀕危保育魚類更減少約6成,而上游及各支流的水庫及水電站對這些物種構成更大的威脅。另外,與80年代相比,黃河流域濕地面積減少16%,其他湖泊濕地、沼澤濕地、河口灘塗濕地等則分別減少25%、21%及40%。

連煜認為,黃河流域生態保護必須堅持「節約優先、保護優先、自然恢復為主」,未來將以黃河河源區、河口區及主要河流生態廊道進行保護和修復,並建構以龍陽峽-劉家峽為核心的水源涵養及淡水資源庫保護體系。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※使用真空封口機常見問題?

※高價位跟低價位的示波器又有何差異?

※各大百貨每波促銷贈品活動,限量知名LOGOL型資料夾,獨家販售中!!

※哪裡有合版印刷優惠,尋找L夾客製化印刷廠商?

※如何正確使用開飲機?

洗滌塔運作原理介紹

最近30年黃河流域魚類族群已減少約一半,其中原生種及瀕危保育魚類更減少約6成

最近30年黃河流域魚類族群已減少約一半,其中原生種及瀕危保育魚類更減少約6成,而上游及各支流的水庫及水電站對這些物種構成更大的威脅。另外,與80年代相比,黃河流域濕地面積減少16%,其他湖泊濕地、沼澤濕地、河口灘塗濕地等則分別減少25%、21%及40%。

連煜認為,黃河流域生態保護必須堅持「節約優先、保護優先、自然恢復為主」,未來將以黃河河源區、河口區及主要河流生態廊道進行保護和修復,並建構以龍陽峽-劉家峽為核心的水源涵養及淡水資源庫保護體系。

本站聲明:網站內容來源於https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】 ※一般小吃店常見使用的nbr耐油手套,是否有含耐酸鹼作用? ※ 迴轉式空壓機性能介紹!

海線倉儲類人員薪水待遇最新情報

※(全省) 堆高機租賃保養一覽表

※高效率洗滌塔活性碳設備,能去除多少有機溶劑?

射出成型技師工作甘苦談

通過javascript 執行環境理解她

古往今來最難的學的武功(javascript)算其一。

欲練此功必先自宮,願少俠習的此功,笑傲江湖。

你將了解

  • 執行棧(Execution stack)
  • 執行上下文(Execution Context)
  • 作用域鏈(scope chains)
  • 變量提升(hoisting)
  • 閉包(closures)
  • this 綁定

執行棧

又叫調用棧,具有 LIFO(last in first out 後進先出)結構,用於存儲在代碼執行期間創建的所有執行上下文。

當 JavaScript 引擎首次讀取你的腳本時,它會創建一個全局執行上下文並將其推入當前的執行棧。每當發生一個函數調用,引擎都會為該函數創建一個新的執行上下文並將其推到當前執行棧的頂端。
引擎會運行執行上下文在執行棧頂端的函數,當此函數運行完成后,其對應的執行上下文將會從執行棧中彈出,上下文控制權將移到當前執行棧的下一個執行上下文。

我們通過下面的示例來說明一下

function one() {
  console.log('one')
  two()
}
function two() {
  console.log('two')
}
one()

當程序(代碼)開始執行時 javscript 引擎創建 GobalExecutionContext (全局執行上下文)推入當前的執行棧,此時 GobalExecutionContext 處於棧頂會立刻執行全局執行上下文 然後遇到 one() 引擎都會為該函數創建一個新的執行上下文 oneFunctionExecutionContext 並將其推到當前執行棧的頂端並執行,然後遇到two() twoFunctionExecutionContext 入棧並執行至出棧,回到 oneFunctionExecutionContext 繼續執行至出棧 ,最後剩餘一個 GobalExecutionContext 它會在程序關閉的時候出棧。

然後調用棧如下圖:

如果是這樣的代碼

function foo() {
  foo()
}
foo()

如下

當一個遞歸沒有結束點的時候就會出現棧溢出

什麼是執行上下文

了解 JavaScript 的執行上下文,有助於你理解更高級的內容比如變量提升、作用域鏈和閉包。既然如此,那到底什麼是“執行上下文”呢?

執行上下文是當前 JavaScript 代碼被解析和執行時所在環境的抽象概念。

Javascript 中代碼的執行上下文分為以下三種:

  1. 全局執行上下文(Global Execution Context)- 這個是默認的代碼運行環境,一旦代碼被載入,引擎最先進入的就是這個環境。
  2. 函數執行上下文(Function Execution Context) – 當執行一個函數時,運行函數體中的代碼。
  3. Eval – 在 Eval 函數內運行的代碼。

javascript 是一個單線程語言,這意味着在瀏覽器中同時只能做一件事情。當 javascript 解釋器初始執行代碼,它首先默認進入全局上下文。每次調用一個函數將會創建一個新的執行上下文。

javascript執行棧中不同執行上下文之間的詞法環境有一種關聯關係,從棧頂到棧底(從局部直到全局),這種關係被叫做作用域鏈

簡單的說,每次你試圖訪問函數執行上下文中的變量時,進程總是從自己上下文環境中開始查找。如果在自己的上下文中沒發現要查找的變量,繼續搜索下一層上下文。它將檢查執行棧中每一個執行上下文環境,尋找和變量名稱匹配的值,直到找到為止,如果到全局都沒有則拋出錯誤。

執行上下文的創建過程

我們現在已經知道,每當調用一個函數時,一個新的執行上下文就會被創建出來。然而,在 javascript 引擎內部,這個上下文的創建過程具體分為兩個階段:

創建階段 > 執行階段

創建階段

執行上下文在創建階段創建。在創建階段發生以下事情:

  1. LexicalEnvironment 組件已創建。
  2. VariableEnvironment 組件已創建。

因此,執行上下文可以在概念上表示如下:

ExecutionContext = {
  LexicalEnvironment = <詞法環境>,
  VariableEnvironment = <變量環境>,
}

詞法環境(Lexical Environment)

文檔將詞法環境定義為:

詞法環境是一種規範類型,基於 ECMAScript 代碼的詞法嵌套結構來定義標識符與特定變量和函數的關聯關係。詞法環境由環境記錄(environment record)和可能為空引用(null)的外部詞法環境組成。

簡而言之,詞法環境是一個包含標識符變量映射的結構。(這裏的標識符表示變量/函數的名稱,變量是對實際對象【包括函數類型對象】或原始值的引用)

詞法環境有兩種類型

  • 全局環境(在全局執行上下文中)是一個沒有外部環境的詞法環境。全局環境的外部環境引用為 null。它擁有一個全局對象(window 對象)及其關聯的方法和屬性(例如數組方法)以及任何用戶自定義的全局變量,this 的值指向這個全局對象。
  • 函數環境,用戶在函數中定義的變量被存儲在環境記錄中。對外部環境的引用可以是全局環境,也可以是包含內部函數的外部函數環境。

每個詞彙環境都有三個組成部分:

1)環境記錄(environment record)

2)對外部環境的引用(outer)

3) 綁定 this

環境記錄 同樣有兩種類型(如下所示):

  • 聲明性環境記錄 存儲變量、函數和參數。一個函數環境包含聲明性環境記錄。
  • 對象環境記錄 用於定義在全局執行上下文中出現的變量和函數的關聯。全局環境包含對象環境記錄

抽象地說,詞法環境在偽代碼中看起來像這樣:

詞法環境和環境記錄值是純粹的規範機制,ECMAScript 程序不能直接訪問或操縱這些值。

GlobalExectionContext = {
  // 詞法環境
  LexicalEnvironment:{
    // 功能環境記錄
    EnvironmentRecord:{
      Type:"Object",
      // Identifier bindings go here
     }
    outer:<null>,
    this:<global object>
  }
}
FunctionExectionContext = {
  LexicalEnvironment:{
    EnvironmentRecord:{
      Type:"Declarative",
      // Identifier bindings go here
     }
    outer:<Global or outer function environment reference>,
    this:<取決於函數的調用方式>
  }
}

變量環境:

它也是一個詞法環境,其 EnvironmentRecord 包含了由 VariableStatements 在此執行上下文創建的綁定。
如上所述,變量環境也是一個詞法環境,因此它具有上面定義的詞法環境的所有屬性。
在 ES6 中,LexicalEnvironment 組件和 VariableEnvironment 組件的區別在於前者用於存儲函數聲明和變量( let 和 const )綁定,而後者僅用於存儲變量( var )綁定。
讓我們結合一些代碼示例來理解上述概念:

let a = 20
const b = 30
var c

function multiply(e, f) {
  var g = 20
  return e * f * g
}

c = multiply(20, 30)

執行上下文如下所示:

GlobalExectionContext = {
  LexicalEnvironment:{
    EnvironmentRecord:{
      Type:"Object",
      // Identifier bindings go here
      a:<uninitialized>,
      b:<uninitialized>,
      multiply:<func>
    },
    outer:<null>,
    ThisBinding:<Global Object>
  },
  VariableEnvironment:{
    EnvironmentRecord:{
      Type:"Object",
      // Identifier bindings go here
      c:undefined,
    }
    outer:<null>,
    ThisBinding:<Global Object>
  }
}

在執行階段,完成變量賦值。因此,在執行階段,全局執行上下文將看起來像這樣。

// 執行
GlobalExectionContext = {
LexicalEnvironment: {
    EnvironmentRecord: {
      Type: "Object",
      // Identifier bindings go here
      a: 20,
      b: 30,
      multiply: < func >
    }
    outer: <null>,
    ThisBinding: <Global Object>
  },
VariableEnvironment: {
    EnvironmentRecord: {
      Type: "Object",
      // Identifier bindings go here
      c: undefined,
    }
    outer: <null>,
    ThisBinding: <Global Object>
  }
}

當 multiply(20, 30)遇到函數調用時,會創建一個新的函數執行上下文來執行函數代碼。因此,在創建階段,函數執行上下文將如下所示:

// multiply 創建
FunctionExectionContext = {
LexicalEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      Arguments: {0: 20, 1: 30, length: 2},
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>,
  },
VariableEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      g: undefined
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>
  }
}

在此之後,執行上下文將執行執行階段,這意味着完成了對函數內部變量的賦值。因此,在執行階段,函數執行上下文將如下所示:

// multiply 執行
FunctionExectionContext = {
LexicalEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      Arguments: {0: 20, 1: 30, length: 2},
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object>,
  },
VariableEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      g: 20
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>
  }
}

函數完成后,返回的值賦值給c。因此,全局詞法環境得到了更新。之後,全局代碼完成,程序結束。

注: 在執行階段,如果 Javascript 引擎在源代碼中聲明的實際位置找不到 let 變量的值,那麼將為其分配 undefined 值。

變量提升

在網上一直看到這樣的總結: 在函數中聲明的變量以及函數,其作用域提升到函數頂部,換句話說,就是一進入函數體,就可以訪問到其中聲明的變量以及函數。這是對的,但是知道其中的緣由嗎?相信你通過上述的解釋應該也有所明白了。不過在這邊再分析一下。

你可能已經注意到了在創建階段 letconst 定義的變量沒有任何與之關聯的值,但 var 定義的變量設置為 undefined
這是因為在創建階段,代碼會被掃描並解析變量和函數聲明,其中函數聲明存儲在環境中,而變量會被設置為 undefined(在 var 聲明變量的情況下)或保持未初始化(在 letconst 聲明變量的情況下)。
這就是為什麼你可以在聲明之前訪問var 定義的變量(儘管是 undefined ),但如果在聲明之前訪問letconst 定義的變量就會提示引用錯誤的原因。
這就是我們所謂的變量提升

思考題:

console.log('step1:',a)
var a = 'artiely'
console.log('step2:',a)
function bar (a){
  console.log('step3:',a)
  a = 'TJ'
  console.log('step4:',a)
  function a(){
  }
}
bar(a)
console.log('step5:',a)

對外部環境的引用

上面代碼如果我們改用調用方式如下:

let a = 20
const b = 30
var c

function multiply() {
  var g = 20
  return a * b * g
}

c = multiply()

其實你會發現結果是一樣的
但是 multiply 的執行上下文卻發生一些變化

// 創建
FunctionExectionContext = {
LexicalEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      Arguments: { length: 0},
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>,
  },
VariableEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      // Identifier bindings go here
      g: undefined
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>
  }
}
// 執行
FunctionExectionContext = {
LexicalEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      Arguments: { length: 0},
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>,
  },
VariableEnvironment: {
    EnvironmentRecord: {
      Type: "Declarative",
      // Identifier bindings go here
      g: 20
    },
    outer: <GlobalLexicalEnvironment>,
    ThisBinding: <Global Object or undefined>
  }
}

multiply() 執行的時候會直接在 outer: <GlobalLexicalEnvironment>,中查找a,b

對外部環境的引用意味着它可以訪問其外部詞法環境。這意味着如果在當前詞法環境中找不到它們,JavaScript 引擎可以在外部環境中查找變量。這就是之前說的 作用域鏈

閉包

MDN 解釋 閉包是由函數以及創建該函數的詞法環境組合而成。這個環境包含了這個閉包創建時所能訪問的所有局部變量

這是我認為對閉包最合理的解釋了,就看你怎麼理解閉包的機制了。
其實閉包與作用域鏈有着密切的關係。

首先我們來看看什麼樣的代碼會產生閉包。

function foo() {
  var name = 'artiely'
  function bar() {
    console.log(`hello `)
  }
  bar()
}
foo()

以上代碼是有閉包嗎?沒有~

function foo() {
  var name = 'artiely'
  function bar() {
    console.log(`hello ${name}`)
  }
  bar()
}
foo()

我們只做了微小的調整,現在就有閉包了,我們只是在bar中加入了name得引用
上面的代碼還可以寫成這樣

// 或者
function foo() {
  var name = 'artiely'
  return function bar() {
    console.log(`hello ${name}`)
  }
}
foo()()

對於閉包的形成我進行了如下的幾點歸納

  1. A 函數內必須有 B 函數的聲明;
  2. B 函數必須引用 A 函數的變量;
  3. B 函數被調用(當然前提是 A 函數被調用)

以上 3 點缺一不可

我們來分析一下上面代碼的執行上下文

// 創建
fooFunctionExectionContext = {
LexicalEnvironment: {
  EnvironmentRecord: {
    Type: "Declarative",
    Arguments: { length: 0},
    bar: < func >,
  },
  outer: <GlobalLexicalEnvironment>,
  ThisBinding: <Global Object or undefined>,
},
VariableEnvironment: {
  EnvironmentRecord: {
    Type: "Declarative",
    name: undefined
  },
  outer: <GlobalLexicalEnvironment>,
  ThisBinding: <Global Object or undefined>
  }
}
// 執行 略
// 創建
barFunctionExectionContext = {
LexicalEnvironment: {
  EnvironmentRecord: {
    Type: "Declarative",
    Arguments: { length: 0},
  },
  outer: <fooLexicalEnvironment>,
  ThisBinding: <Global Object or undefined>,
},
VariableEnvironment: {
  EnvironmentRecord: {
    Type: "Declarative",
  },
  outer: <fooLexicalEnvironment>,
  ThisBinding: <Global Object or undefined>
  }
}
// 執行 略

這裏因為bar的創建存在着對fooLexicalEnvironment里變量的引用,雖然foo可能執行已結束但變量不會被回收。這種機制被叫做閉包

閉包是由函數以及創建該函數的詞法環境組合而成。這個環境包含了這個閉包創建時所能訪問的所有局部變量

我們結合上面例子重新分解一下這句話

閉包是由函數bar以及創建該函數foo的詞法環境組合而成。這個環境包含了這個閉包創建時所能訪問的所有局部變量name

但是從chrome的理解,閉包並沒有包含所能訪問的所有局部變量,僅僅包含所被引用的變量。

this 綁定

在全局執行上下文中,值是 this 指全局對象。(在瀏覽器中,this 指的是 Window 對象)。

在函數執行上下文中,值 this 取決於函數的調用方式。如果它由對象引用調用,則將值 this 設置為該對象,否則,將值 this 設置為全局對象或 undefined(在嚴格模式下)。例如:

let person = {
  name: 'peter',
  birthYear: 1994,
  calcAge: function() {
    console.log(2018 - this.birthYear)
  }
}

person.calcAge()
// 'this' 指向 'person', 因為 'calcAge' 是被 'person' 對象引用調用的。

let calculateAge = person.calcAge
calculateAge()
// 'this' 指向全局 window 對象,因為沒有給出任何對象引用

注意所有的()()自調用的函數 this 都是指向Global Object的既瀏覽器中的window

最後

如果本文對你有幫助或覺得不錯請幫忙點贊,如有疑問請留言。

其他參考:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!