为了转生而点技能~day1:javascript 起手篇(RHS、LHS、语法作用域

本系列是为了转生,为了点技能而解任务的攻略提示,皆无营利、亦非营利取向。

  1. Javascript:属於直译式语言
    * 直接利用直译器产出,故电脑只能透过直译器观测。
    * 不用定义型别。

https://ithelp.ithome.com.tw/upload/images/20211119/201437627jcQD6gvFZ.jpg

var ming = '小明' 所生成的树显示 variableDeclaration:建立一个变数的 ming

ming = '小明'所生成的树是显示 assignmentExpression:建立一个 ming 属性

JS是用' '号,Java是用""来包裹string。
https://ithelp.ithome.com.tw/upload/images/20211119/201437627KErBDKYP0.jpg

var ming = '小明':'小明'是赋值予变数ming,属於LHS。

var man = ming : ming是赋值予变数man,属於LHS。

console.log(ming) :console.log需要变数ming的值,向右寻找得'小明',属於RHS。

LHS错误:https://ithelp.ithome.com.tw/upload/images/20211119/20143762xLTT2wzd0N.jpg

console.log(ming) 改成console.log(min) :
RHS错误:https://ithelp.ithome.com.tw/upload/images/20211119/20143762ZqPHuqktJk.jpg


js之语法作用域(lexical scope):

静态作用域,变数在语法解析的时候就确定了作用的范围;动态作用域,变数在函式调用的时候才确定。
JS属於静态作用域。

https://ithelp.ithome.com.tw/upload/images/20211119/20143762OJJSZWwp8k.jpg

静态作用域:
fn2()为多少?
虽然function fn2()里面已经有宣告value,但是function fn1()的里面并无宣告value,
造成为了执行console.log(value)而去寻找外部的 value = 1。

动态作用域:
fn2()为多少?
虽然function fn2()里面已经有宣告value,但是function fn1()的里面并无宣告value,
造成为了执行console.log(value)而去寻找上一层函式function fn2()的 value = 2。

  1. var的作用域:
  • 变数有效范围的最小单位是以 function 做分界。
  • 函式区块内透过 var 定义的变数实际上只属於这个函式。
  • 如果函式内没有定义变数,则会向外寻找,直到全域变数为止。
  • function 内没有重新宣告变数,则会function 内的变数值,跑去变更了外层的同名变数 x的值。
var x = 1;

var doSomeThing = function(y) {
  x = 100;
  return x + y;
};

console.log( doSomeThing(50) );   // 150
console.log( x );                 // 100
var x = 1;

var doSomeThing = function(y) {
  var x = 100;
  return x + y;
};

console.log( doSomeThing(50) );   // 150
console.log( x );                 // 1
  1. ES6 之後有 let 与 const 分别定义「变数」与「常数」。 与 var 不同的是,它们的作用域是透过大括号 { } 来区分。


执行堆叠(execution stack):
指的是函式运行的时候会创造一个执行环境,执行环境则会依照函式的运作顺序,先执行先堆。
EX:
https://ithelp.ithome.com.tw/upload/images/20211119/20143762Istmtsq9ON.jpg

推叠顺序:

  1. 全域执行环境(没有函式执行的时候,就已经先有的) -> 2. 执行doSomething() -> 3. 执行sayHi()
    https://ithelp.ithome.com.tw/upload/images/20211119/20143762PhQKXrt1nf.jpg

范围链(scope chain):

意思是「当函式的本身没有相对应的变数或函式时,他就会向外层去寻找」,因此这一个向外寻找的过程与执行堆叠以及执行环境并不会有任何直接关系。

https://ithelp.ithome.com.tw/upload/images/20211119/20143762Aqy7mF5MmP.jpg


提升(hoisting):

var a = '1';

当尚未开始执行的时候,只是先创造环境给变数a,等於在记忆体空间中腾出位置给变数a;当开始执行的时候才会在记忆体上给'1'这个数值。

先创造环境给变数a,等於在记忆体空间中腾出位置给变数a的过程,就是hoisting。

var a = '1';
function fn(){
......
};

若是函式(这边的函式是函式陈述式/函式逆名式)的创造阶段,记忆体空间中腾出位置给函式名fn(),且函式的陈述式function fn()亦会先行载入於记忆体。

https://ithelp.ithome.com.tw/upload/images/20211119/201437627cYLpKvLbh.jpg


<<:  React-依视窗大小改变DOM

>>:  CSS For Kindle Made By Thefiresupport.Com

Day28影片教学:Azure小白如何使用Azure Cache for Redis来存取常用资料

在昨天我们谈完如何使用Azure Kubernetes Service部署Container应用程序...

卡夫卡的藏书阁【Book27】- Kafka - KafkaJS Admin 4

“They say ignorance is bliss.... they're wrong ” ...

建立你想要的文化(3)- 落地

将价值观转化为具体行为 有了明确的价值之後,下一步就是为每一个价值举出具体的行为。这是因为不管你陈述...

CMoney工程师战斗营weekly5

鬼门关前走一遭生死一瞬间的一周 事情是这样的,由於一个月前的我刚进入战斗营,对物件导向的概念还是非常...

Day 17 ( 中级 ) 灯光绕圈圈 ( 数字函式 )

灯光绕圈圈 ( 数字函式 ) 教学原文参考:灯光绕圈圈 ( 数字函式 ) 这篇文章会介绍如何使用「函...