當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
一段代码看出JS的的解析到执行的顺序规则
生活随笔
收集整理的這篇文章主要介紹了
一段代码看出JS的的解析到执行的顺序规则
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一段代碼看出JS的的解析到執(zhí)行的順序規(guī)則
代碼
function bar(a, b) {b = 3;var b;function b(){}console.log(a); // 打印出:10console.log(b); // 打印出:3return function a(){}; }bar(10);執(zhí)行順序
函數(shù)外面的時候,代碼拆成前后兩部分來看:
第 1 部分:(申明)
- 1、申明了一個bar=undefined的函數(shù)變量,用代碼可以看成:(VO是執(zhí)行上下文,可以看成是this
)
VO = {bar:undefined}第 2 部分:(執(zhí)行)
- 2、執(zhí)行bar(10)這里由于是函數(shù),存在獨立作用域,只要存在作用域就先解析,所以這里又可以拆成兩部分來看:
第 2.1 部分:(申明)
- 先聲明a=10,b=undefined兩個形參變量,再申明函數(shù)變量b=function b(){},由于上下文VO1中已經(jīng)存在 b 了,所以會覆蓋掉形參b的申明,然后再申明var變量b=undefined,并覆蓋已經(jīng)存在VO1中函數(shù)變量b,用代碼表示:
注意:這里需要注意的是函數(shù)表達(dá)式return function a(){}并不會提前申明,函數(shù)表達(dá)式和函數(shù)申明的異同是,除了標(biāo)準(zhǔn)的函數(shù)申明:function a(){},其他的都是函數(shù)表達(dá)式,如:var a = function (){}、(function a(){})...等。
注意:申明的權(quán)重:argument(函數(shù)的形參申明) > function聲明 > var聲明 (也就之前提高的變量提升Hoisting)
第 2.2 部分:(執(zhí)行)
- 先執(zhí)行b=3,再執(zhí)行兩個console.log,再執(zhí)行:函數(shù)表達(dá)式申明,及執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的一段代码看出JS的的解析到执行的顺序规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Loading(二)--ThreeBod
- 下一篇: SSM框架-使用MyBatis Gene