JavaScript如何运作?
直译/编译式语言
直译式语言原始码-(直译器)-代码生成-(运行)-应用程式错误直接反映在环境中(console)优点:弹性较佳,不需定义型别逐行执行,不需整份写完就能测试编译式语言撰写原始码-(预先编译)-代码生成-(运行)-应用程式预先编译即可除错(不是等到运行时报错)-效能较佳优点事前型别检查,减少型别错误整份代码转译为机械码,速度较快JavaScript直译器转换过程
语法基本单元化(解析标点符号/词彙)-Tokenizing抽象结构树(定义原始码结构)-Abstract Syntax Tree AST代码生成线上原始码单元化
var ming='Xiao ming';
语法基本单元化-在这个步骤,只有单纯地将程式码逐步解析,=
不会被视作指派,而是符号
[ { //var 被解析为关键字 "type": "Keyword", "value": "var" }, { //ming 被解析为识别符 "type": "Identifier", "value": "ming" }, { //=被解析为符号 "type": "Punctuator", "value": "=" }, { //'Xiao ming'被解析为字串 "type": "String", "value": "'Xiao ming'" }, { "type": "Punctuator", "value": ";" }]
抽象结构树化,注意,此时亦未执行代码功能(赋值)
{ "type": "Program", "body": [ //阵列每一元素皆为一组语意 { //解析出语意为变数宣告 "type": "VariableDeclaration", "declarations": [ { //变数宣告者 "type": "VariableDeclarator", "id": { //变数辨识符 "type": "Identifier", "name": "ming" }, "init": { //变数值 "type": "Literal", "value": "Xiao ming", "raw": "'Xiao ming'" } } ], //变数定义方式 "kind": "var" } ], "sourceType": "script"}
RHS and LHS
RHS:Right-hand side:取
右侧变数的值会在编译时期检查错误LHS:Left-hand side:赋
值左侧变数只会在执行期间检查错误//LHSvar ming='Xiao ming';//编译时期报错'Xiao ming'='man'//RHSconsole.log(ming);var man=ming;//编译时期不会报错console.log(a)
下一篇:2-JavaScript作用域