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

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

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

http://img2.58codes.com/2024/201437627jcQD6gvFZ.jpg

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

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

JS是用' '号,Java是用""来包裹string。
http://img2.58codes.com/2024/201437627KErBDKYP0.jpg

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

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

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

LHS错误:http://img2.58codes.com/2024/20143762xLTT2wzd0N.jpg

console.log(ming) 改成console.log(min) :
RHS错误:http://img2.58codes.com/2024/20143762ZqPHuqktJk.jpg


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

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

http://img2.58codes.com/2024/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。

var的作用域:变数有效範围的最小单位是以 function 做分界。函式区块内透过 var 定义的变数实际上只属于这个函式。如果函式内没有定义变数,则会向外寻找,直到全域变数为止。function 内没有重新宣告变数,则会function 内的变数值,跑去变更了外层的同名变数 x的值。例
var x = 1;var doSomeThing = function(y) {  x = 100;  return x + y;};console.log( doSomeThing(50) );   // 150console.log( x );                 // 100
var x = 1;var doSomeThing = function(y) {  var x = 100;  return x + y;};console.log( doSomeThing(50) );   // 150console.log( x );                 // 1
ES6 之后有 let 与 const 分别定义「变数」与「常数」。 与 var 不同的是,它们的作用域是透过大括号 { } 来区分。

执行堆叠(execution stack):
指的是函式运行的时候会创造一个执行环境,执行环境则会依照函式的运作顺序,先执行先堆。
EX:
http://img2.58codes.com/2024/20143762Istmtsq9ON.jpg

推叠顺序:

全域执行环境(没有函式执行的时候,就已经先有的) -> 2. 执行doSomething() -> 3. 执行sayHi()
http://img2.58codes.com/2024/20143762PhQKXrt1nf.jpg

範围鍊(scope chain):

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

http://img2.58codes.com/2024/20143762Aqy7mF5MmP.jpg


提升(hoisting):

var a = '1';

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

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

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

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

http://img2.58codes.com/2024/201437627cYLpKvLbh.jpg


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章