本系列是为了转生,为了点技能而解任务的攻略提示,皆无营利、亦非营利取向。
Javascript:属于直译式语言* 直接利用直译器产出,故电脑只能透过直译器观测。
* 不用定义型别。
var ming = '小明' 所生成的树显示 variableDeclaration:建立一个变数的 ming
ming = '小明'所生成的树是显示 assignmentExpression:建立一个 ming 属性
JS是用' '号,Java是用""来包裹string。
var ming = '小明':'小明'是赋值予变数ming,属于LHS。
var man = ming : ming是赋值予变数man,属于LHS。
console.log(ming) :console.log需要变数ming的值,向右寻找得'小明',属于RHS。
LHS错误:
console.log(ming) 改成console.log(min) :
RHS错误:
js之语法作用域(lexical scope):
静态作用域,变数在语法解析的时候就确定了作用的範围;动态作用域,变数在函式调用的时候才确定。
JS属于静态作用域。
静态作用域:
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 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:
推叠顺序:
全域执行环境(没有函式执行的时候,就已经先有的) -> 2. 执行doSomething() -> 3. 执行sayHi()
範围鍊(scope chain):
意思是「当函式的本身没有相对应的变数或函式时,他就会向外层去寻找」,因此这一个向外寻找的过程与执行堆叠以及执行环境并不会有任何直接关係。
提升(hoisting):
var a = '1';
当尚未开始执行的时候,只是先创造环境给变数a,等于在记忆体空间中腾出位置给变数a;当开始执行的时候才会在记忆体上给'1'这个数值。
先创造环境给变数a,等于在记忆体空间中腾出位置给变数a的过程,就是hoisting。
var a = '1';
function fn(){
......
};
若是函式(这边的函式是函式陈述式/函式逆名式)的创造阶段,记忆体空间中腾出位置给函式名fn(),且函式的陈述式function fn()亦会先行载入于记忆体。